RegisterType和RegisterInstance的不同使用情况--Unity Application Block(1)
2009-03-19 14:39
459 查看
Unity Application Block的使用中有两种手动向Unity container注册mappings 的类,即RegisterType和RegisterInstance,他们的不同是:
1、RegisterType向Unity container中注册类型(registers a type ),可以是接口或是一个基类,在使用Resolve 方法获得对象时,dependency injection特性将其作用;默认情况下lifetime是短周期,每次使用 Resolve 方法都获得一个新对象;如果想使用单件的,可以这样:
2、RegisterInstance则是注册实例 (instance),默认情况下每次使用 Resolve 方法都获得同一个对象,即单件模式;
如果想让实例的dependency injection特性起作用,要使用BuildUp 方法,即
public class Log4X : MarshalByRefObject
{
[Microsoft.Practices.Unity.Dependency]
public MyWriter writer { get; set; }
public Log4X()
{
//this.writer = writer;
}
public void Writer(string message)
{
writer.Writer(message);
}
}
public class MyWriter
{
public void Writer(string message)
{
Console.WriteLine();
Console.WriteLine("===========In MyWriter===============");
Console.WriteLine("message:{0}", message);
}
}
调用:
Log4X logger = new Log4X();
container.BuildUp<Log4X>(logger);
logger.Writer("你好");
还可以进行一次进行多个注册操作:
EmailService myEmailService = new EmailService();
IUnityContainer myContainer = new UnityContainer()
.RegisterType<IMyService, DataService>()
.RegisterType<IMyUtilities, DataConversions>()
.RegisterInstance<IMyService>(myEmailService);
1、RegisterType向Unity container中注册类型(registers a type ),可以是接口或是一个基类,在使用Resolve 方法获得对象时,dependency injection特性将其作用;默认情况下lifetime是短周期,每次使用 Resolve 方法都获得一个新对象;如果想使用单件的,可以这样:
container.RegisterType<CustomerService>(new ContainerControlledLifetimeManager());
2、RegisterInstance则是注册实例 (instance),默认情况下每次使用 Resolve 方法都获得同一个对象,即单件模式;
如果想让实例的dependency injection特性起作用,要使用BuildUp 方法,即
public class Log4X : MarshalByRefObject
{
[Microsoft.Practices.Unity.Dependency]
public MyWriter writer { get; set; }
public Log4X()
{
//this.writer = writer;
}
public void Writer(string message)
{
writer.Writer(message);
}
}
public class MyWriter
{
public void Writer(string message)
{
Console.WriteLine();
Console.WriteLine("===========In MyWriter===============");
Console.WriteLine("message:{0}", message);
}
}
调用:
Log4X logger = new Log4X();
container.BuildUp<Log4X>(logger);
logger.Writer("你好");
还可以进行一次进行多个注册操作:
EmailService myEmailService = new EmailService();
IUnityContainer myContainer = new UnityContainer()
.RegisterType<IMyService, DataService>()
.RegisterType<IMyUtilities, DataConversions>()
.RegisterInstance<IMyService>(myEmailService);
相关文章推荐
- Unity Application Block 学习笔记之一使用配置文件
- 使用 Unity Application Block(三):理解和使用依赖注入的键
- Unity Application Block 1.0系列(5): 使用BuildUp让已存在对象实例也支持依赖注入
- 在ASP.NET 中使用 Unity Application Block – 示例(提供代码下载)
- Unity Application Block 学习笔记之一使用接口
- Unity Application Block 1.0系列(5): 使用BuildUp让已存在对象实例也支持依赖注入
- 使用 Unity Application Block(三):理解和使用依赖注入的键
- 在ASP.NET 中使用 Unity Application Block – 示例(提供代码下载)
- Unity Application Block-配置文件的使用-示例(附源码下载)
- Unity Application Block-配置文件的使用-示例(附源码下载)
- 使用Unity Application block实现Ioc[原创]
- Unity Application Block-配置文件的使用-示例(附源码下载)
- 使用QQuickWidget和QQmlApplicationEngine的不同之处
- Enterprise Library 4.1 + Unity Application Block 1.2 December 2008
- 根据不同情况使用静态页和动态页
- php中不同情况下整形变量可当成整形也可是字符串型来使用
- 以软件周期C开发周期说明不同测试的使用情况
- 什么情况使用 weak 关键字,和assign何不同?
- 什么情况使用 weak 关键字,相比 assign 有什么不同?
- 使用python写一个监控不同机器的使用内存情况并使用flask出图