首页 > 代码库 > My.Ioc 基本使用——简单示例

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

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

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

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

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

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 基本使用——简单示例