博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOC----LightInject
阅读量:6690 次
发布时间:2019-06-25

本文共 1021 字,大约阅读时间需要 3 分钟。

  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. 获取实例的机制

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

转载于:https://www.cnblogs.com/ykwang/p/4657988.html

你可能感兴趣的文章
CSS3中的box-sizing
查看>>
云计算新风向:多云战略优化企业云支出
查看>>
Windows改Linux(一),新建Ubuntu虚拟机小白向导
查看>>
HTML5调用手机前置摄像头或后置摄像头拍照,canvas显示,经过Android测试
查看>>
关于一个插图的翻译
查看>>
Spring Cloud构建微服务架构:分布式服务跟踪(入门)【Dalston版】
查看>>
【355天】跃迁之路——程序员高效学习方法论探索系列(实验阶段113-2018.01.26)...
查看>>
Rust编程语言的核心部件
查看>>
CSS(颜色_字体)
查看>>
BZOJ 1061: [Noi2008]志愿者招募【单纯形裸题】
查看>>
JVM上的随机数与熵池策略
查看>>
Java8并发教程:Threads和Executors
查看>>
v8世界探险(3) - v8的抽象语法树结构
查看>>
《C语言及程序设计》实践项目——用if语句实现分支结构
查看>>
“AI +跨界+技术” 看2018中国会展创新者大会的新观点
查看>>
JavaScript——数据类型转换(显式和隐式)
查看>>
【半月刊 4】前端高频面试题及答案汇总
查看>>
lc686. Repeated String Match
查看>>
RHEL 7.1操作系统安装过程说明
查看>>
基于Python的性能自动化测试框架设计思路和实现
查看>>