Unity Application Block 学习手册3

image

设置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 ContainerControlledLifetimeManager());

7. 在容器内注册一个未命名的类型映射,将一个继承于某个基类的类,作为获取映射时的实现类,并且由容器控制这个对象的生命周期,在容器消亡时,对象也消亡,并且只在容器内存在一次(单例)

myContainer.RegisterType<MyServiceBase, EmailServices>(new ContainerControlledLifetimeManager());

8. 只注册一个单例的类型

myContainer.RegisterType<CustomerService>(new ContainerControlledLifetimeManager());

9. 带命名的单例类型注册

myContainer.RegisterType<CustomerService>("Customers", new ContainerControlledLifetimeManager());

10. 带命名的对于一个接口的映射,并由容器控制对象实际的生命周期

myContainer.RegisterType<IMyService, CustomerService>("Customers", new ContainerControlledLifetimeManager());

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. 注册一个实现了接口的实例,并且使用ExternallyControllerLifetimeManager管理对象的生命周期

EmailService myEmailService = new EmailService();
myContainer.RegisterInstance<IMyService>(myEmailService,
                            new ExternallyControlledLifetimeManager());

15. myContainer.RegisterInstance<EmailService>(myEmailService,
                            new ExternallyControlledLifetimeManager());
// or
myContainer.RegisterInstance<MyServiceBase>(myEmailService,
                            new ExternallyControlledLifetimeManager());

16. myContainer.RegisterInstance<MyServiceBase>("Email",
    myEmailService, new ExternallyControlledLifetimeManager());

17. 可以在一个语句内,连贯的注册多个映射

EmailService myEmailService = new EmailService();
IUnityContainer myContainer = new UnityContainer()
   .RegisterType<IMyService, DataService>()
   .RegisterType<IMyUtilities, DataConversions>()
   .RegisterInstance<IMyService>(myEmailService);

解析一个对象

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]来标记方法 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值