[英]C# MEF usage with static classes
我的解决方案中有一个静态类,该类用于处理各种程序集。 我想通过MEF链接它们,所以我在一个类中做了一个字段。
[Import(typeof(A))]
static private A _a1;
然后我有一个方法,将程序集名称作为参数传递给该方法:
public static A LoadPackage(string filePath)
{
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(filePath));
var _container = new CompositionContainer(catalog);
???
}
那么,现在有没有办法从文件路径指定的程序集中导入类型?
我不能:
_container.ComposeParts(this);
由于课程是静态的,我也不能这样做
_container.ComposeParts(_a1);
(一开始可能是完全错误的),因为A
没有任何构造函数(因此_a1
为null)
MEF旨在为您创建和初始化对象 。 它不处理静态类中的状态。
我建议您将类及其字段[PartCreationPolicy(CreationPolicy.Shared)]
非静态,并如果要强制执行单例行为,则将其标记为[PartCreationPolicy(CreationPolicy.Shared)]
。
另请参阅关于MEF和单例模式的其他问题 。
好吧,事实证明我正在寻找的方法是GetExportedValue
(是的,我忽略了基本功能):
static private A _a1;
public static A LoadPackage(string filePath)
{
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(filePath));
var _container = new CompositionContainer(catalog);
_a1 = _container.GetExportedValue<A>();
}
我的工作就填补了(以防万一,我已经将它移到另一个班级了,现在看起来很整洁)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.