我不是VB开发人员,但我正在开发一个部分使用VB的大型项目.其中一个要求是实现插件架构以支持动态可扩展的应用程序核心.
我们的VB开发人员似乎认为可以将BLL存储在DLL中 – 将接口保留在原始核心应用程序中 – 在安装扩展之前使其无用.
显然这不太理想.我想知道是否可以将整个子应用程序/组件保存在一个不同的DLL中加载到核心平台中???
有任何想法吗?
这根本不是问题,请看一下我的示例代码.
这是在单独的dll中存在的抽象类:
原文链接:https://www.f2er.com/vb/255608.html这是在单独的dll中存在的抽象类:
public abstract class ServerTask { public int TaskId { get; set;} /// <summary> /// Gets description for ServerTask /// </summary> public abstract string Description { get; } }
public class SampleTask : GP.Solutions.WF.Entities.Tasks.ServerTask { public override string Description { get { return "Sample plugin"; } } }
/// <summary> /// Loads Plugin from file /// </summary> /// <param name="fileName">Full path to file</param> /// <param name="lockFile">Lock loaded file or not</param> /// <returns></returns> static Entities.Tasks.ServerTask LoadServerTask(string fileName,bool lockFile,int taskId) { Assembly assembly = null; Entities.Tasks.ServerTask serverTask = null; if (lockFile) { assembly = System.Reflection.Assembly.LoadFile(fileName); } else { byte[] data = Services.Common.ReadBinaryFile(fileName); assembly = System.Reflection.Assembly.Load(data); } Type[] types = assembly.GetTypes(); foreach (Type t in types) { if (t.IsSubclassOf(typeof(Entities.Tasks.ServerTask))) { serverTask = (Entities.Tasks.ServerTask)Activator.CreateInstance(t); serverTask.TaskId = taskId; break; } } if (serverTask == null) { throw new Exception("Unable to initialize to ServerTask type from library '" + fileName + "'!"); } return serverTask; }
如果您不熟悉c#,请使用c#到vb.net在线转换器.
快乐的编码和最好的问候!Gregor Primar