我正在开发一个项目,我有很多子模块.当我创建另一个子模块时,我们必须编译项目并再次部署它.那不是很酷......
我想为此创建一些逻辑来自动化我的工作.我的想法是将子模块上传到Azure blob存储,然后我的项目下载子模块并在我的项目中包含此子模块,而不编译整个项目.
我不知道如何与我现有的软件集成.
我怎样才能做到这一点?
你有几个选择。我认为最简单的方法是创建一个通用接口,例如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(托管扩展性框架)。
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |