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