我正在开发一个项目,我有很多子模块。当我创建另一个子模块时,我们必须编译项目并再次部署它。那不是很酷......
我想为此创建一些逻辑来自动化我的工作。我的想法是将子模块上传到Azure blob存储,然后我的项目下载子模块并在我的项目中包含此子模块,而不编译整个项目。
我不知道如何与现有软件集成。
我该怎么做?
答案 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);
}
}
IPlugin
和IPluginManager
的代码:
public interface IPluginManager
{
void Foo();
}
public interface IPlugin
{
void Activate(IPluginManager manager);
}
此代码加载保存在downloadedFilePath
文件中的已下载程序集。然后它找到实现IPlugin
的类,并加载它们。
从那以后,它就是你的全部。您可以使用这两个接口来添加插件和应用程序中的功能。实现IPluginManager
的类处理来自插件的所有通信。
如果你不想自己动手,你可以使用MEF(Managed Extensibility Framework)。