2015-05-04 23 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是对的 –

相关问题