2012-02-24 3 views
2

Мы используем Unity framework для инъекции зависимостей. Я регистрирую две конкретные реализации для одного класса. как ...выборочно разрешать зависимости одного и того же интерфейса в единстве

container.RegisterType<IInterface, MyFirstClass>("first"); 
container.RegisterType<IInterface, MySecondClass>("second"); 

В настоящее время существует несколько классов, которые имеет contructer инъекцию выше интерфейс ..

public class Class1 
    { 
     private IInterface _myClass 
     public Class1 (IInterface myClass) 
     { 
     _myClass = myClass // // should be instance of MyFirstClass 
     } 
//.. other code 
    } 

    public class Class2 
    { 
     private IInterface _myClass 

     public Class2 (IInterface myClass) 
     { 
     _myClass = myClass // should be instance of MySecondClass 
     } 
//.. other code 
    } 

Итак, теперь мы хотим разрешить IInterface selectivly в этих двух классов. Class1 и Class2.

Class1 должен быть поврежден MyFirstClass и Class2 должен быть введен MyFirstClass. Можно ли это достичь через систему Unity? Если нет, какие другие рамки IoC поддерживают это?

Просьба высказать свое мнение.

ответ

2

Попробуйте

var container = new UnityContainer(); 
container.RegisterType<IInterface, MyFirstClass>("first"); 
container.RegisterType<IInterface, MySecondClass>("second"); 
container.RegisterType<Class1>(new InjectionConstructor(new ResolvedParameter(typeof(IInterface), "first"))); 
container.RegisterType<Class2>(new InjectionConstructor(new ResolvedParameter(typeof(IInterface), "second"))); 
var class1 = container.Resolve<Class1>(); 
Assert.IsInstanceOfType(class1.MyClass, typeof(MyFirstClass)); 
var class2 = container.Resolve<Class2>(); 
Assert.IsInstanceOfType(class2.MyClass, typeof(MySecondClass)); 

public class MyFirstClass : IInterface 
{ 
} 

public class MySecondClass : IInterface 
{ 
} 

public interface IInterface 
{ 
} 

public class Class1 
{ 
    public IInterface MyClass { get; set; } 
    public Class1(IInterface myClass) 
    { 
    MyClass = myClass; 
    } 
} 
public class Class2 
{ 
    public IInterface MyClass { get; set; } 
    public Class2(IInterface myClass) 
    { 
    MyClass = myClass; 
    } 
} 
+0

Великое решение. он работает для меня. Большое спасибо –

Смежные вопросы