[英]Can delegates be registered with Castle Windsor IOC container?
這可能是一個愚蠢的問題,但是可以在IOC容器(例如溫莎)中注冊代表或事件嗎?
我打算在應用程序啟動時注冊事件功能,以實現策略模式。
我認為,另一種選擇是簡單地將所有代表包裝成類型以在容器中注冊。
無需包裝或子類化函數即可在Windsor中注冊它們。 它們的工作原理與其他任何組件一樣。 如果您需要將一個Func<int>
與另一個Func<int>
,請使用命名組件和服務替代,就像其他任何組件一樣。 例:
[Test]
public void Example() {
var container = new DefaultKernel();
container.Register(Component.For<Func<int>>().Instance(() => 42).Named("42"));
container.Register(Component.For<Func<int>>().Instance(() => 44).Named("44"));
container.Register(Component.For<Something>().DependsOn(ServiceOverride.ForKey("f").Eq("44")));
var s = container.Resolve<Something>();
Assert.AreEqual(44, s.I);
}
class Something {
private readonly int i;
public Something(Func<int> f) {
i = f();
}
public int I {
get { return i; }
}
}
如果您希望使用容器取消事件注冊的耦合,請使用事件接線工具 。
我說這是不可能的,因為您將如何解決依賴性?
如果一個類要求一個Func<bool>
類型的委托,那么您如何區分不同的委托?
封裝委托的替代方法是最好的解決方案,因為它允許您命名委托並將其組合為功能部分。
編輯結果溫莎城堡(Castle Windsor)具有一種在IOC中注冊實例的命名方式。 因此有可能,但是您仍然需要為每個實例指定某種名稱。 請參閱Mauricio Scheffer的答案 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.