1
我遇到類(Parent
)具有依賴關係(IScopedInstance
)並且還在方法內動態解析其他接口(IOtherDependency
)的情況。該接口的實現(Dependency
)與原始類具有相同的依賴關係。我希望該實例的作用域爲Parent
的實例,即:我想要在Parent
和Dependency
之內的相同實例,但只有在從內部解析依賴關係的情況下Parent
我正在使用Castle.Windsor作爲DI容器。在動態解決依賴關係時共享範圍
public class Parent : IParent
{
public Parent(IScopedInstance instance)
{
}
public void DoSomething()
{
var anotherDependency = container.Resolve<IOtherDependency>();
}
}
public class Dependency : IOtherDependency
{
public Dependency(IScopedInstance instance)
{
}
}
這工作時IOtherDepedency
注入的Parent
構造:
container.Register(Component
.For<IScopedInstance>()
.ImplementedBy<ScopedInstance>()
.LifestyleBoundTo(x => x.First(xx =>
xx.ComponentModel.Implementation.InheritsOrImplements(typeof(IParent)))));
但可以理解的,從裏面的方法解決時,這是行不通的,因爲有依賴圖中沒有IParent
(這是一個新圖)。
真正的用例有點不同,我不直接解決方法中的IOtherDependency
,但我刪除了所有不需要的額外信息。
任何想法如何做到這一點?
@ChristianoDegiorgis是對的。您應該使用[TypeFactorySelector](http://docs.castleproject.org/Default.aspx?Page=Typed-Factory-Facility-interface-based-factories&NS=Windsor&AspxAutoDetectCookieSupport=1)註冊工廠方法或工廠,以解決您的依賴關係並通過構造函數推送它們。 你的實現的另一個缺點是你的類知道容器並且依賴於容器及其組件。 是否有阻礙您通過工廠使用構造函數注入的障礙? –
正如我所說的,我並不直接解決依賴問題,但我通過工廠來完成,這在這裏並不重要。我有一個有範圍的生活方式(參見我的最後一段代碼片段),這只是裏面的方法,我需要一個動態調度。我使用的通用接口在多個地方重用。範圍界定的問題是有兩個單獨的圖,所以第二個圖不能訪問第一個圖的範圍 – Kenneth