解决方法是导出创建类型实例的工厂。虽然这意味着你不能直接导入茨艾伦情况下,它确实有一个逻辑来创建它们的好处是厂家的责任,因此类的用户不必知道它:
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
而不是使用导出属性,我相信你可以在容器中存储一个工厂,每次请求虚拟机的实例时调用 – stijn 2011-12-18 09:47:08
Hmm sound有趣的,但请你指点一下关于这个解决方案的一些信息?我怕我不知道我究竟是如何能实现这个解决方案。 – Dror 2011-12-18 09:56:35