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

IOC----LightInject

时间:2015-07-19 06:34:10      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:

  1. 开源项目 引入

LightInject.cs

  1. 默认服务

 new ServiceContainer

  1. 注册跟获取获取服务

container.Register<IFoo, Foo>();
container.Register<IFoo, AnotherFoo>("AnotherFoo");
var instance = container.GetInstance<IFoo>("AnotherFoo");
Assert.IsInstanceOfType(instance, typeof(AnotherFoo));

 

获取实例有多个重载,主要包含服务,借口,服务名,以及生命周期。当只有一个注册存在时,获取可以不用填写服务名

  1. 如果一个服务没有被注册,这时候调用容器中的接口实例会是null,这个时候可以用注册回调

var container = new ServiceContainer();
container.RegisterFallback((type, s) => true, request => new Foo());
var foo = container.GetInstance<IFoo>();

 

第一个断言决定了是否实例第二个委托服务,第二个是要注册的服务委托

  1. 容易继承与Ienumerable<T>
  2. 生命周期

如果注册时不指定生命周期,则是实例是临时的

  • PerScopeLifetime

容器在指定范围内使用后被销毁

container.Register<IFoo,Foo>(new PerScopeLifetime());
using(container.BeginScope())
{

var firstInstance = container.GetInstance<IFoo>();
    var secondInstance = container.GetInstance<IFoo>();
    Assert.AreSame(firstInstance, secondInstance);
}

 

  • PerContainerLifeTime

随容器销毁。

 

  • PerRequestLifeTime

每次都会创建一个实例

  • 另外还可以自定义生命周期

 

 

一个生命周期实例只能用于一个服务实例,不能共享

 

  1. 获取实例的机制

获取实例是在当前线程中获取

IOC----LightInject

标签:

原文地址:http://www.cnblogs.com/ykwang/p/4657988.html

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