首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB.NET动态插件组件

VB.NET动态插件组件
EN

Stack Overflow用户
提问于 2012-08-21 20:55:08
回答 1查看 706关注 0票数 2

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

我们的VB开发人员似乎认为可以将BLL存储在DLL中-将界面全部保留在原始核心应用程序中-在安装扩展之前使其变得无用。

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

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2012-08-21 23:42:21

这完全没有问题,请看一下我的示例代码。下面是存在于单独dll中的抽象类:

代码语言:javascript
复制
public abstract class ServerTask
{
    public int TaskId { get; set;}

    /// <summary>
    /// Gets description for ServerTask
    /// </summary>
    public abstract string Description { get; }


}

这是插件实现中的代码:

代码语言:javascript
复制
public class SampleTask : GP.Solutions.WF.Entities.Tasks.ServerTask
{

    public override string Description
    {
        get 
        {
            return "Sample plugin";
        }
    }

}

最后从加载插件的核心应用程序中编写代码:

代码语言:javascript
复制
    /// <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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12055308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档