码迷,mamicode.com
首页 > 其他好文 > 详细

My.Ioc 基本使用——简单示例

时间:2014-09-03 14:33:06      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   使用   strong   ar   

MyIoc 的使用遵循 Register-Resolve-Release 这样一种模式。

我们先来看如何注册服务。注册一个服务其实非常简单。首先创建一个 IObjectContainer 实例,然后调用该实例的任何一个 Register 方法即可。请看代码:

bubuko.com,布布扣
1 var container = new ObjectContainer(true);
2 container.Register<IService, MyService>();
View Code

 这里有几点要说明一下:首先说一下 ObjectContainer 对象的构造。这个对象包含几个构造函数。

bubuko.com,布布扣
1 public ObjectContainer()
2 public ObjectContainer(bool useLightweightCodeGeneration)
3 public ObjectContainer(bool useLightweightCodeGeneration, IConstructorSelector constructorSelector)
4 public ObjectContainer(ContainerOption option)
View Code

这些构造函数都是用于指定 ContainerOption。

Register 方法包含多个重载,其中主要提供四种注册服务的方式:

  • 注册某个常量或现成的实例对象。
  • 通过 Func 的方式注册某个服务。
  • 通过 Type 方式注册服务,并指定使用 Reflection 方式来构建对象。
  • 通过 Type 方式注册服务,并指定使用 Emit 方式来构建对象。

 

优化建议:

  • 尽量使用泛型方式进行注册,这样可以在注册服务时避免反射开销,提高性能。
  • 尽量少用 Func 方式进行注册,因为采用这种方式时,框架将无法跟踪服务的依赖项,从而无法在其依赖项注册/注销/激活/停用时通知服务使用者。而且使用 Func 方式注册时,框架每次都需要从注册表中查询依赖项,因而无法利用缓存提高性能。
  • 如果所注册服务的生命周期为 Container 或某种 Singleton,不要显式指定采用 Emit 方式(默认不会采用这种方式)通过动态生成代码来构建对象,因为这类生命周期的对象仅构建一次,之后便复用该对象,不值得再承担动态生成代码这样的开销。

My.Ioc 基本使用——简单示例

标签:style   blog   http   color   os   io   使用   strong   ar   

原文地址:http://www.cnblogs.com/johnny-liu/p/3953411.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!