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

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

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

我怎样才能做到这一点?

最佳答案

您有几种选择。我认为最简单的方法是创建一个通用接口(interface),类似于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的类,并加载它们。

从那时起,一切都由您来完成。您可以扩展两个接口(interface)以在插件和应用程序中添加功能。实现IPluginManager的类处理与插件之间的所有通信。

如果您不喜欢自己动手,可以使用MEF(Managed Extensibility Framework)。

关于c# - 包含来自网络的动态库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29533146/

10-13 06:06