【轉】DI與循環引用

下面看看循環引用的幾個場景,在使用依賴注入框架時應該儘可能避免出現這樣的狀況:

1.經過Constructor Injection生成的對象在構造器的參數中互相引用框架

public class Class1
{
    public Class1(Class2 test2)
    {
         ..
    }
}

public class Class2
{
    public Class2(Class1 test1)  
    {
        
    }
}

經過Unity容器裝載Class1時,會作Constructor Injection,因爲Class1依賴於Class2,因此會先去裝載Class2。在裝載Class2時一樣也會作Constructor Injection,因爲Class2又依賴於Class1,因此會再去裝載Class1......這樣一直持續裝載下去,就成了一個死循環,跳不出來。

2. 經過Constructor Injection生成的對象做爲自身構造器的參數

直接看例子:對象

public class Class1
{
    public Class1(Class1 test1)
  {   }
}

3. 經過method call injection生成的對象互相引用blog

直接看例子:get

public class Class1
{
    [InjectionMethod]
    public void Method1()
    {
        Method2();
    }

    [InjectionMethod]
    public void Method2()
    {
        Method1();
    }
}


4.經過property(setter) injection生成的對象互相引用string

直接看例子:it

public class Class1
{
    [Dependency]
    public string Propert1
    {
        get
        {
            return Propert2;
        }
    }

    [Dependency]
    public string Propert2
    {
        get
        {
            return Propert1;
        }
    }
}

做者:Inrie (洪曉軍)
出處:http://www.cnblogs.com/inrieio

相關文章
相關標籤/搜索