我正在开发一个项目,并且有很多子模块。当我创建另一个子模块时,我们必须编译项目并再次部署它。那不是很酷...
我想为此创建一些逻辑以使我的工作自动化。我的想法是将子模块上传到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);
}
}
IPlugin
和IPluginManager
的代码: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/