C#之MEF

最近在研究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);
            }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值