包括来自Web的动态库

Tar*_*nko 5 .net c# azure

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

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

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

我怎样才能做到这一点?

Pat*_*man 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

IPlugin和的代码IPluginManager

public interface IPluginManager
{
    void Foo();
}

public interface IPlugin
{
    void Activate(IPluginManager manager);
}
Run Code Online (Sandbox Code Playgroud)

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

从那时起,一切都是你的了。您可以扩展这两个接口以在插件和应用程序中添加功能。类实现处理IPluginManager来自和到插件的所有通信。


如果您不喜欢自己开发,可以使用 MEF(托管扩展性框架)。