• IOC----LightInject


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

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

  • 相关阅读:
    Timer 实现2秒4秒连环炸
    Java中的注解
    PHP连接打印机
    php同步mysql两个数据库中表的数据
    thinkphp 两表、三表联合查询
    ereg/eregi报错处理办法
    ThinkPHP3.2判断手机端访问并设置默认访问模块的方法
    使用PHP获取时间今天 明天 昨天 时间戳的详解
    jquery获取radio和select选中值
    php开启mysqli扩展之后如何连接数据库
  • 原文地址:https://www.cnblogs.com/ykwang/p/4657988.html
Copyright © 2020-2023  润新知