示例一,正常使用:
相关定义:
代码语言:javascript复制public interface ICar
{
int Run();
}
public class BMW : ICar
{
private int _miles = 0;
public int Run()
{
return _miles;
}
}
public class Ford : ICar
{
private int _miles = 0;
public int Run()
{
return _miles;
}
}
public class Audi : ICar
{
private int _miles = 0;
public int Run()
{
return _miles;
}
}
public class Driver
{
private ICar _car = null;
public Driver(ICar car)
{
_car = car;
}
public void RunCar()
{
Console.WriteLine("Running {0} - {1} mile ", _car.GetType().Name, _car.Run());
}
}
使用:
代码语言:javascript复制var container = new UnityContainer();
container.RegisterType<ICar, BMW>();
var driver = container.Resolve<Driver>();
driver.RunCar();
我们使用Resolve来解析我们想要的调用对象,在这里是Driver。
示例二,多个注入:
相关定义的代码不变,将使用部分的代码改为:
代码语言:javascript复制var container = new UnityContainer();
container.RegisterType<ICar, BMW>();
container.RegisterType<ICar, Audi>("LuxuryCar");
// Register Driver type
container.RegisterType<Driver>("LuxuryCarDriver",
new InjectionConstructor(container.Resolve<ICar>("LuxuryCar")));
Driver driver1 = container.Resolve<Driver>();// injects BMW
driver1.RunCar();
Driver driver2 = container.Resolve<Driver>("LuxuryCarDriver");// injects Audi
driver2.RunCar();
示例三,多个构造函数参数:
相关定义:
代码语言:javascript复制public interface ICarKey {
}
public class BMWKey : ICarKey
{
}
public class AudiKey : ICarKey
{
}
public class FordKey : ICarKey
{
}
public class Driver
{
private ICar _car = null;
private ICarKey _key = null;
public Driver(ICar car, ICarKey key)
{
_car = car;
_key = key;
}
public void RunCar()
{
Console.WriteLine("Running {0} with {1} - {2} mile ", _car.GetType().Name , _key.GetType().Name, _car.Run());
}
}
相关使用:
代码语言:javascript复制var container = new UnityContainer();
container.RegisterType<ICar, Audi>();
container.RegisterType<ICarKey, AudiKey>();
var driver = container.Resolve<Driver>();
driver.RunCar();
示例四,多个构造函数:
相关定义不变,将使用部分代码改为:
代码语言:javascript复制public class Driver
{
private ICar _car = null;
[InjectionConstructor]
public Driver(ICar car)
{
_car = car;
}
public Driver(string name)
{
}
public void RunCar()
{
Console.WriteLine("Running {0} - {1} mile ", _car.GetType().Name, _car.Run());
}
}
代码语言:javascript复制container.RegisterType<Driver>(new InjectionConstructor(new Ford()));
//or
container.RegisterType<ICar, Ford>();
container.RegisterType<Driver>(new InjectionConstructor(container.Resolve<ICar>()));
示例五,基类型作为构造函数参数:
相关定义:
代码语言:javascript复制public class Driver
{
private ICar _car = null;
private string _name = string.Empty;
public Driver(ICar car, string driverName)
{
_car = car;
_name = driverName;
}
public void RunCar()
{
Console.WriteLine("{0} is running {1} - {2} mile ",
_name, _car.GetType().Name, _car.Run());
}
}
相关使用:
代码语言:javascript复制var container = new UnityContainer();
container.RegisterType<Driver>(new InjectionConstructor(new object[] { new Audi(), "Steve" }));
var driver = container.Resolve<Driver>(); // Injects Audi and Steve
driver.RunCar();
完整请参考:
http://www.tutorialsteacher.com/ioc/constructor-injection-using-unity-container