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>();容器

 

第一個斷言決定了是否實例第二個委託服務,第二個是要註冊的服務委託request

  1. 容易繼承與Ienumerable<T>
  2. 生命週期

若是註冊時不指定生命週期,則是實例是臨時的im

  • PerScopeLifetime

容器在指定範圍內使用後被銷燬項目

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

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

 

  • PerContainerLifeTime

隨容器銷燬。

 

  • PerRequestLifeTime

每次都會建立一個實例

  • 另外還能夠自定義生命週期

 

 

一個生命週期實例只能用於一個服務實例,不能共享

 

  1. 獲取實例的機制

獲取實例是在當前線程中獲取

本站公眾號
   歡迎關注本站公眾號,獲取更多信息