我有一个ViewModel,可以通过MEF导出。我希望此ViewModel每次导入时都根据将提供给它的枚举/特定对象参数以不同的方式初始化。
我已经阅读了一些有关该主题的文章,发现也许是这样-
http://msdn.microsoft.com/en-us/library/ee155691.aspx#metadata_and_metadata_views
可以满足我的需求,但是我不确定这是否是最好的方法。
我一直在考虑的另一种方法是正常导入类,然后在实例化后调用一个特殊的初始化方法来接收我的参数。但是,这似乎不是经典的MEF实现,并且可能会失去一些“魔力”。
我希望有人能够为我指出实现此目标的推荐方法。
谢谢!
最佳答案
解决方法是导出创建您类型实例的工厂。虽然这意味着您不能直接导入这些实例,但这样做的好处是创建实例的逻辑是工厂的责任,因此该类的用户不必了解它:
public class ServiceWithParameter
{
public ServiceWithParameter( int a )
{
this.a = a;
}
private readonly int a;
}
[Export]
public class ServiceWithParameterFactory
{
public ServiceWithParameterFactory()
{
instance = 0;
}
public ServiceWithParameter Instance()
{
return new ServiceWithParameter( instance++ );
}
private int instance;
}
//now everywhere you need ServiceWithParameter:
[Import]
ServiceWithParameterFactory serviceFactory;
var instanceA = serviceFactory.Instance(); //instanceA.a = 0
var instanceB = serviceFactory.Instance(); //instanceB.a = 1
一种更可扩展的方式是告诉容器您有一家工厂,并在此处提供示例:http://pwlodek.blogspot.com/2010/10/mef-object-factories-using-export.html
关于wpf - 导入具有特定参数的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8550681/