2014-11-05 92 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);