VB.NET动态插件组件

我不是VB开发人员,但我正在开发一个部分使用VB的大型项目.其中一个要求是实现插件架构以支持动态可扩展的应用程序核心.

我们的VB开发人员似乎认为可以将BLL存储在DLL中 – 将接口保留在原始核心应用程序中 – 在安装扩展之前使其无用.

显然这不太理想.我想知道是否可以将整个子应用程序/组件保存在一个不同的DLL中加载到核心平台中???

有任何想法吗?

这根本不是问题,请看一下我的示例代码.
这是在单独的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

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...