编程语言
首页 > 编程语言> > c#-MEF导入组成问题

c#-MEF导入组成问题

作者:互联网

我已经阅读了有关在不导出包含类的情况下导入导入的所有问题,但是找不到解决方案.有人知道实现我想要做的事情的方法吗?

我的模块程序集具有内部使用的形式和类.这些表格需要访问某些导出的合同,但由于它们不在MEF“组成树”中,因此未加载导入

主机组装:

public class Host
{
    public Host()
    { /* Compose parts here... */ }

    [Export(typeof(Licence))]
    public Licence LoadedLicence { get; set; }  

    [Export(typeof(IModule))]
    public List<IModule> LoadedModules { get; set; }
}

模块组装:

[Export(typeof(IModule))]
public class Module : IModule
{        
    public Module() { }

    public void DoSomething()
    {
        SubForm sub = new SubForm();
        sub.ShowDialog();
    }

    [Import(typeof(Licence))]
    public Licence LoadedLicence { get; set; } // This works here
}

public class SubForm : Form
{        
    public SubForm ()
    { }

    [Import(typeof(Licence))]
    public Licence LoadedLicence { get; set; } // This doesn't work in here
}

据我所知,我的选择是:

>将参数传递给构造函数(痛苦)
>在需要满足进口条件的类上使用虚拟出口?

还有其他吗?

解决方法:

在您的特定情况下,我只是将SubForm导出为其具体类型,然后在Module中导入.在这种情况下,将满足其所有进口.虽然如果您希望多次致电DoSomething,那么您将遇到问题.

人们有时执行此操作的另一种方法是在主机中的ICompositionService合同下手动向其自身添加CompositionContainer,然后将模块导入ICompositionService,然后每次创建SubForm时,只需将对象实例传递到ICompositionService.SatisifyImportsOnce即可满足其导入.

标签:mef,c,net
来源: https://codeday.me/bug/20191210/2098504.html