PRISM + MEF - Импорт & ИмпортМани - PullRequest
5 голосов
/ 02 марта 2011

FooService.cs :

public interface IFooService
{
    int Foo();
}

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


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

FooViewModel.cs :

public class FooViewModel : NotificationObject
{
    [ImportMany(typeof(IFooService))]
    public IEnumerable<IFooService> FooServices { get; private set; }

    [Import("Foo1")]
    public IFooService FirstFoo { get; private set; }
}


Один импорт работает, потому что яесть именованный контракт, а мульти импорт - нет.Если я изменю атрибуты экспорта и удаляю именованный контракт, мультиимпорт работает, а одиночный импорт - нет.Как я могу заставить обоих работать одновременно?

1 Ответ

3 голосов
/ 03 марта 2011

Вы можете поместить несколько атрибутов экспорта в ваши классы:

[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; }
}
...