2014-11-05 89 views
1

在我以前的question我問怎麼註冊我的抽象工廠統一。依賴注入與抽象工廠(統一)

現在我想使用依賴注入。

我有這樣一個類:

public interface ICarManufacturer 
{ 

} 

public class CarManufacturer : ICarManufacturer 
{ 

    private readonly ISportsCar sportsCar; 
    public CarManufacturer(ISportsCar sportsCar) 
    { 
     this.sportsCar = sportsCar; 
    } 

    public void DoSomething() 
    { 
     sportsCar.Accelerate(); 
    } 
} 

我怎麼能告訴團結傳遞正確跑車(寶馬或大衆)?

回答

1

使用Unity你可以註冊的類型和讓團結奮鬥出來注入什麼,或者你可以創建對象,然後要求統一注入他們。要回答你的問題,你需要後者,那麼:

您需要註冊您的CarManufacturer類型,但你也應該註冊您的跑車類型。假設你有兩種類型BMWSportsCarVWSportsCar實現了ISportsCar,你需要將它們註冊爲命名的類型,所以你(統一)可以識別它們:

container.RegisterType<ICarManufacturer,CarManufacturer>() 
container.RegisterType<ISportsCar, BMWSportsCar>("BMWSportsCar") 
container.RegisterType<ISportsCar, VWSportsCar>("VWSportsCar") 

當你想創建在CarManufactuer例如,你需要創建一個依賴覆蓋告訴你要使用哪些特定的跑車實現統一:

//get the BMW sports car from the unity container 
DependencyOverride bmw = new DependencyOverride(typeof(ISportsCar) 
          ,container.Resolve<ISportsCar>("BMWSportsCar")); 

//and get an instance of the CarManufacturer class, passing in the bmw instance 
ICarManufacturer obj = container.Resolve<ICarManufacturer>(bmw);