C# 棱镜&x2B;MEF--进口及;重要人物

C# 棱镜&x2B;MEF--进口及;重要人物,c#,dependency-injection,mef,C#,Dependency Injection,Mef,FooService.cs: FooViewModel.cs: 公共类FooViewModel:NotificationObject { [进口数量(类型(IFooService))] 公共IEnumerable FooServices{get;private set;} [进口(“Foo1”)] public IFooService FirstFoo{get;private set;} } 单一导入可以工作,因为我有一个命名的契约,而多重导入没有。如果我更改了导出属性并删除了命名的契约,那

FooService.cs:

FooViewModel.cs:

公共类FooViewModel:NotificationObject
{
[进口数量(类型(IFooService))]
公共IEnumerable FooServices{get;private set;}
[进口(“Foo1”)]
public IFooService FirstFoo{get;private set;}
}


单一导入可以工作,因为我有一个命名的契约,而多重导入没有。如果我更改了导出属性并删除了命名的契约,那么多重导入可以工作,但是单一导入不能。如何使两者同时工作?

您可以在类中放置多个导出属性:

[Export(typeof(IFooService))]
[Export("Foo1", typeof(IFooService))]
public class Foo1 : IFooService
{
    public int Foo() { return 1; }
}

[Export(typeof(IFooService))]
[Export("Foo2", typeof(IFooService))]
public class Foo2 : IFooService
{
    public int Foo() { return 2; }
}

我不认为这和棱镜有任何关系。
public class FooViewModel : NotificationObject
{
    [ImportMany(typeof(IFooService))]
    public IEnumerable<IFooService> FooServices { get; private set; }

    [Import("Foo1")]
    public IFooService FirstFoo { get; private set; }
}
[Export(typeof(IFooService))]
[Export("Foo1", typeof(IFooService))]
public class Foo1 : IFooService
{
    public int Foo() { return 1; }
}

[Export(typeof(IFooService))]
[Export("Foo2", typeof(IFooService))]
public class Foo2 : IFooService
{
    public int Foo() { return 2; }
}