设置Unity Container
1. 创建一个UnityContainer对象
IUnityContainer myContainer = new UnityContainer();
2. 创建一个已有容器的子UnityContainer对象
IUnityContainer childCtr = myContainer.CreateChildContainer();
3. 在容器内注册一个未命名的类型映射,将一个实现某个接口的对象映射在接口上作为获取接口时的实现类
myContainer.RegisterType<IMyService, CustomerService>();
4. 在容器内注册一个未命名的类型映射,将一个继承于某个基类的类,作为获取映射时的实现类
myContainer.RegisterType<MyServiceBase, DataService>();
5. 在容器内注册一个命名的类型映射,将一个实现某个接口的对象映射在接口上作为获取接口时的实现类
myContainer.RegisterType<IMyService, CustomerService>(“Customers”);
6. 在容器内注册一个未命名的类型映射,将一个实现某个接口的对象映射在接口上作为获取接口时的实现类,并且由容器控制这个对象的生命周期,在容器消亡时,对象也消亡,并且只在容器内存在一次(单例)
myContainer.RegisterType<IMyService, CustomerService>(new ContainerControlledLifet
7. 在容器内注册一个未命名的类型映射,将一个继承于某个基类的类,作为获取映射时的实现类,并且由容器控制这个对象的生命周期,在容器消亡时,对象也消亡,并且只在容器内存在一次(单例)
myContainer.RegisterType<MyServiceBase, EmailServices>(new ContainerControlledLifet
8. 只注册一个单例的类型
myContainer.RegisterType<CustomerService>(new ContainerControlledLifet
9. 带命名的单例类型注册
myContainer.RegisterType<CustomerService>("Customers", new ContainerControlledLifet
10. 带命名的对于一个接口的映射,并由容器控制对象实际的生命周期
myContainer.RegisterType<IMyService, CustomerService>("Customers", new ContainerControlledLifet
11. 容器内注册一个实现接口的实例
EmailService myEmailService = new EmailService(); myContainer.RegisterInstance<IMyService>(myEmailService);
12. 直接注册一个对象的实例
EmailService myEmailService = new EmailService(); myContainer.RegisterInstance<EmailService>(myEmailService);
13. 直接注册一个带命名的对象实例
EmailService myEmailService = new EmailService(); myContainer.RegisterInstance<EmailService>("Email", myEmailService);
14. 注册一个实现了接口的实例,并且使用ExternallyControllerLife
EmailService myEmailService = new EmailService();
myContainer.RegisterInstance<IMyService>(myEmailService,
15. myContainer.RegisterInstance<EmailService>(myEmailService,
// or
myContainer.RegisterInstance<MyServiceBase>(myEmailService,
16. myContainer.RegisterInstance<MyServiceBase>("Email",
17. 可以在一个语句内,连贯的注册多个映射
EmailService myEmailService = new EmailService();
IUnityContainer myContainer = new UnityContainer()
解析一个对象
1.
IMyService result = myContainer.Resolve<IMyService>();
2. 获得已注册在容器内,继承于基类的对象实例
MyServiceBase result = myContainer.Resolve<MyServiceBase>();
3. 获得已注册在容器内,实现接口的命名的对象实例
IMyService result = myContainer.Resolve<IMyService>("Data");
4. 获得已注册在容器内,继承于基类的命名的对象实例
MyServiceBase result = myContainer.Resolve<MyServiceBase> ("Customers");
5. 获得所有实现了接口的对象实例列表
IEnumerable<IMyObject> objects = myContainer.ResolveAll <IMyObject>();
6. 使用注册的依赖注入,从已经存在的对象实例获得对象实例
CustomerService result = myContainer.BuildUp <CustomerService>(myService);
7. 使用命名的依赖注入,从已经存在的对象实例获得对象实例
CustomerService result = myContainer.BuildUp <CustomerService>(myService, "Customers");
依赖注入
多构造函数的注入使用[InjectionConstructor]属性来标记构造注入的构造 函数,如果只有一个构造函数的话,默认使用这个函数。
使用[Dependency]属性来标记一个属性为可依赖注入,并且可以通过对属性 的命名指定来指定依赖注入的名称[Dependency(”name”)]。
对于方法的依赖注入,使用属性[InjectionMethod]来标记方法。