【发布时间】:2015-05-13 18:33:07
【问题描述】:
我在 MEF 中使用 ImportingConstructor,例如:
public class ClassA : IClassA
{
private string _message;
public ClassA()
{
_message = "Message from constructor 1 of class A";
}
[ImportingConstructor]
public ClassA([Import("ClassA_n")]int n)
{
_message = "Message from constructor 2 of class A: " + n.ToString();
}
}
参数 n 使用 ComposeExportedValue 组成,例如:
container.ComposeExportedValue<int>("ClassA_n", 12);
有没有办法在 CompositionContainer 的同一个实例(容器)中更新或删除/重新组合 n 的值,比如 20 而不是 12?
谢谢
更新: 首先,我是使用 MEF 的新手,我试图创建一个简单的问题场景。我可能过于简化了它并转移了实际问题。实际上,我有一个工厂类,它为我提供了一个基于指定类型的导出类。导出的类有一个类型为 ClassB 的构造函数参数。
public class ClassFactory
{
public T GetClassA<T>() where T : IClassA
{
return MEF.CurrentContainer.GetExportedValue<T>();
}
}
public class ClassA : IClassA
{
[ImportingConstructor]
public ClassA(IClassB classB)
{
}
}
现在我想要告诉工厂类是重用 ClassB 的现有实例(之前导入的)进行多次调用还是重置/创建一个新实例。我也尝试过 CreationPolicy.NonShared,但无法弄清楚如何在我的场景中使用它。我不想一直或所有类都需要新实例,而是想控制它。
【问题讨论】:
-
我不知道如何解决这个问题,但是如果我可以提供一些建议,请考虑尝试考虑添加两个或三个相关标签,这样您可能会吸引更多人熟悉问题。 :)
-
感谢奥古斯塔!但是,由于声誉级别,它不允许我添加新标签。
-
是否有意在每次调用 ComposeExportedValue() 时创建一个新实例?
-
@alexm,请查看我的问题的更新。我试图使用 ComposeExportedValue() 但它可能不是必需的。