包括来自Web的动态库

时间:2015-04-09 08:08:25

标签: c# .net azure

我正在开发一个项目,我有很多子模块。当我创建另一个子模块时,我们必须编译项目并再次部署它。那不是很酷......

我想为此创建一些逻辑来自动化我的工作。我的想法是将子模块上传到Azure blob存储,然后我的项目下载子模块并在我的项目中包含此子模块,而不编译整个项目。

我不知道如何与现有软件集成。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您有几个选择。在我看来,最简单的方法是创建一个通用接口,如IPlugin。在远程程序集中实现它,并让应用程序检查它。

IPluginManager manager = this; // let this class implement IPluginManager

Assembly assembly = Assembly.LoadFile(downloadedFilePath);

foreach (Type type in assembly.GetTypes())
{
    foreach (Type interfaceType in type.FindInterfaces
                                   ( delegate(Type m, object filterCriteria)
                                     {
                                         return m.FullName == typeof(IPlugin).FullName;
                                     }
                                   , null
                                   )

            )
    {
        IPlugin plugin = (IPlugin)Activator.CreateInstance(interfaceType);
        plugin.Activate(manager);
    }
}

IPluginIPluginManager的代码:

public interface IPluginManager
{
    void Foo();
}

public interface IPlugin
{
    void Activate(IPluginManager manager);
}

此代码加载保存在downloadedFilePath文件中的已下载程序集。然后它找到实现IPlugin的类,并加载它们。

从那以后,它就是你的全部。您可以使用这两个接口来添加插件和应用程序中的功能。实现IPluginManager的类处理来自插件的所有通信。


如果你不想自己动手,你可以使用MEF(Managed Extensibility Framework)。