最近在研究MEF,我现在有一个需求,首先是要实现解耦,那么我每个动态库必须互相没有依赖。然后就是动态加载的问题。
以前研究过MEF的自动加载,但是,有一点不能满足我的需求,应为好像只能加载一个实例,我有时候需要加载多个实例。
还是老规矩先提需求,再研究解决方案。
1,能否创建多个实例?而且当有多个模块同时继承某个接口的时候,创建指定的模块多个实例?
目前就这一个需求吧。
https://www.cnblogs.com/yunfeifei/p/3991330.html
通过几天的思考,基本上有了思路了。
我是这么计划的:
写一个类,暴露一个接口,然后通过这个接口创建多个类,就可以实现多个实例了。
方法如下:
导出模块A
[Export("A_Module",typeof(Interface_A))]
[PartCreationPolicy(CreationPolicy.Shared)]
public class A_Module:Interface_A
{
AControl_View m_AControl_View = null;
public UserControl GetAView()
{
if(null != m_AControl_View)
{
return m_AControl_View;
}
m_AControl_View = new AControl_View();
return m_AControl_View;
}
}
导入模块A
[Import("A_Module")]
public Interface_A AModule { get; set; }
然后通过导入的实例,可以创建多个实例
string szRootPath = AppDomain.CurrentDomain.BaseDirectory;
var _catalog = new DirectoryCatalog(szRootPath);
var _container = new CompositionContainer(_catalog);
_container.ComposeParts(this);
if(null != AModule)
{
var view = AModule.GetAView();
Grid grid = new Grid();
grid.Children.Add(view);
WorkArea.Children.Add(grid);
}