C# 4.0 使用MEF为同一导入提供不同的值
这个问题与MEF的使用有关 我想在这两种情况下为同一导入提供不同的值C# 4.0 使用MEF为同一导入提供不同的值,c#-4.0,dependency-injection,mef,C# 4.0,Dependency Injection,Mef,这个问题与MEF的使用有关 我想在这两种情况下为同一导入提供不同的值 [Export("A1", typeof(IA))] [Export("A2", typeof(IA))] class A : IA { [Import("B")] public IB B; } [PartCreationPolicy(CreationPolicy.NonShared)] [Export(typeof(IA))] class A : IA { [Import] public IB B; }
[Export("A1", typeof(IA))]
[Export("A2", typeof(IA))]
class A : IA
{
[Import("B")]
public IB B;
}
[PartCreationPolicy(CreationPolicy.NonShared)]
[Export(typeof(IA))]
class A : IA
{
[Import]
public IB B;
}
在上述两种情况下,我希望在第一种导出类型中使用不同的值来满足IB
的导入
var a1 = Container.GetExportedValue<IA>("A1");
var a2 = Container.GetExportedValue<IA>("A1");
var a1=Container.GetExportedValue(“a1”);
var a2=容器.GetExportedValue(“A1”);
或者这是第二次出口
var a1 = Container.GetExportedValue<IA>();
var a2 = Container.GetExportedValue<IA>();
var a1=Container.GetExportedValue();
var a2=Container.GetExportedValue();
我希望Aa1
和a2
的两个实例具有不同的IB
值。我不想使用ImportMany
,因为那时我必须决定选择哪一个,并且我想将该逻辑保留在类A
之外
与这些导出相关的两个场景是,我希望有一个通用视图,用于处理不同类型的视图模型,这些视图模型实现了一些接口和一个类的不同实例,该类提供了一些服务,可以使用不同的配置参数进行配置。我不完全理解您想做什么,但我认为您可以通过在IB导入上指定非共享的创建策略来实现这一点
[Import(RequiredCreationPolicy=CreationPolicy.NonShared)]
public IB B;
我不完全理解您试图做什么,但我认为您可以通过在IB导入上指定非共享的创建策略来完成
[Import(RequiredCreationPolicy=CreationPolicy.NonShared)]
public IB B;
也许你在找这样的东西
public class AExporter
{
[Export("A1", typeof(IA)]
public IA A1
{
get
{
return new A(this.B1);
}
}
[Export("A2", typeof(IA)]
public IA A2
{
get
{
return new A(this.B2);
}
}
[Import("B1", typeof(IB))]
public IB B1 { private get; set; }
[Import("B2", typeof(IB))]
public IB B2 { private get; set; }
}
然而,MEF并不是为对合成进行如此细粒度的控制而设计的。您可以尝试类似的替代方案,它与MEF很好地集成。也许您正在寻找类似的产品
public class AExporter
{
[Export("A1", typeof(IA)]
public IA A1
{
get
{
return new A(this.B1);
}
}
[Export("A2", typeof(IA)]
public IA A2
{
get
{
return new A(this.B2);
}
}
[Import("B1", typeof(IB))]
public IB B1 { private get; set; }
[Import("B2", typeof(IB))]
public IB B2 { private get; set; }
}
然而,MEF并不是为对合成进行如此细粒度的控制而设计的。您可以尝试类似的替代方案,它与MEF很好地集成