我想在Windsor解決了一系列實現此接口的類:注入相同類型的屬性在溫莎
public interface IDocumentParser
{
Message ParseDocument(XDocument document);
IDocumentParser NextParser { get; set; }
}
基本上我已經是一個鏈條的責任,其中第一分析器與會代表如果它無法處理文檔,則鏈中的下一個。我想知道溫莎是否有辦法解決這種依賴問題。我嘗試了以下,但它將我的NextParser屬性設置爲null。
container.Register(
Component.For<IDocumentParser>().ImplementedBy<DocumentParser1>(),
Component.For<IDocumentParser>().ImplementedBy<DocumentParser2>(),
Component.For<IDocumentParser>().ImplementedBy<DocumentParser3>(),
Component.For<IDocumentParser>().ImplementedBy<DocumentParser4>());
有什麼建議嗎?
編輯:
好了,它看起來像問題是以下內容:我註冊爲可啓動的(通過StartableFacility),這得到了我的解析器登記前稱爲依賴組件。現在
class DependentObject
{
public DependentObject(IDocumentParser firstParser) {}
public void Start() {}
public void Stop() {}
}
,它看起來像一個啓動的組成部分,即會爲已註冊開始,從而以某種方式停止解析過程爲所有相關的解析器。對於我來說,我解決了一個DeferredStart()配置StartableFacility,就像這樣:
var container = new WindsorContainer();
container
.AddFacility<StartableFacility>(
// Without this container.Resolve<IDocumentParser>().NextParser is null
c => c.DeferredStart());
.Register(
Component.For<DependentObject>()
.StartUsingMethod(m => m.Start)
.StopUsingMethod(m => m.Stop),
Component.For<IDocumentParser>().ImplementedBy<DocumentParser1>(),
Component.For<IDocumentParser>().ImplementedBy<DocumentParser2>(),
Component.For<IDocumentParser>().ImplementedBy<DocumentParser3>(),
Component.For<IDocumentParser>().ImplementedBy<DocumentParser4>()
);
我很納悶,不過,爲什麼發生這種情況。在這種情況下,我期望溫莎或者拋出一個異常,指出他無法解決IDocumentParser依賴性問題,或者解決整個鏈,而不僅僅是第一個節點。有人知道這是否是設計?