2015-05-04 26 views
0

使用Autofac,我們如何從依賴類中訪問激活器類?我們如何從一個依賴類中訪問噴油器對象?

例如,我們有兩個類AB其中A類注入B。所以我想從B的構造函數訪問的A對象的引用:

public class A 
{ 
    private readonly B _b; 
    public A(B b) 
    { 
     _b = b; 
    } 
} 

public class B 
{ 
    public B(...) 
    { 
     // in here i want to access to the reference of 
     // the object which injects this class, 
     // (which in this example is the 'A') 

    } 
} 

感謝。

+2

這是一個糟糕的設計,這是臭名昭着的「循環依賴」。你應該考慮重新設計你的代碼,以便它不需要'A'實例。 –

+0

B不需要A的新實例,它只需要注入B的A的當前實例。實際上B將知道哪個類正在注入它來爲它做一些特殊的工作。 –

+2

@AliAdl - 這正是「壞設計」的意思。 'B'不應該(需要)知道哪個'A'使用它。 - 另一方面,也許你錯了。如果'B'需要知道'A',但'A'不需要知道'B',那麼'B'的實例應該在其構造函數中獲得'A'的實例。如果確實'A'需要'B' *和*'B'需要'A',那麼您很可能會遇到設計問題。如果你詳細闡述你想要完成的事情,我們可能會提出一種不同的方法。 – Corak

回答

1

如果你需要那個,你應該考慮重新設計一個循環依賴會讓你的生活更加困難。 SRP原則是否受到尊重?拆分A可能是解決方案。

順便說一句,如果你真的想這樣做,我強烈disrecommend,您可以使用Lazy<A>

class A 
{ 
    private readonly B _b; 
    public A(B b) 
    { 
     _b = b; 
    } 
} 

class B 
{ 
    public B(Lazy<A> a) 
    { 
     this._a = a; 
    } 

    private readonly Lazy<A> _a; 
} 

當然,你將無法訪問的一個B的內部構造函數,但您將能夠訪問AB方法。

+1

如果'A'是每個依賴範圍的實例,則這當然不會滿足OP的需求。 OP的評論說他需要依賴關係使用的同一個實例。 –

+0

@SriramSakthivel是對的。我想使用http://stackoverflow.com/questions/28645099/identify-the-dependency-resolving-an-instance-ioc-autofac/28646750#28646750 –

+0

@Cryil謝謝你的答案,但不幸的是它實際上並不是我想要的:(Sriram是對的 –

相關問題