0
我有這個界面的多種實現:溫莎城堡:解決多個組件具有相同的名稱和類型
public interface IDomainEventHandler<TDomainEventContext>
where TDomainEventContext : IDomainEventContext
{
void Handle(TDomainEventContext context, object sender);
}
,我想根據事件上下文的類型來解決其中的一些在運行時,所以我說輸入工廠到我的系統:
ublic interface IDomainEventHandlerFactory : IDisposable
{
IEnumerable<IDomainEventHandler<TDomainEventContext>> ResolveAll<TDomainEventContext>()
where TDomainEventContext : IDomainEventContext;
}
,這是我的註冊:
container.Register(Classes.FromAssemblyContaining<SomeClass>().
BasedOn(typeof(IDomainEventHandler<>)).WithServiceAllInterfaces().
LifestyleTransient());
我現在要做的下一件事:
添加Name屬性到IDomainEventHandler接口:
public interface IDomainEventHandler<TDomainEventContext>
where TDomainEventContext : IDomainEventContext
{
string Name { get; }
void Handle(TDomainEventContext context, object sender);
}
然後我想註冊這個名稱屬性(按照約定)每個事件處理程序,然後我想要能夠解決所有具有相同的名稱(和相同類型的事件上下文)
組件,我希望我的目標是很清楚
所以我的問題是:
1)我如何做註冊部分(對我的界面名稱字段)?
2)兩個事件處理程序是否可以使用相同的名稱註冊?
3)工廠應該是什麼樣子?
又是我的目標是能夠說:我希望所有的事件處理程序處理型「AddingItemEventContext」的事件上下文,但只有那些有名字「ElectronicItem」(然後我得到的所有的處理程序與我有關)
這聽起來很適合[策略模式](https://sourcemaking.com/design_patterns/strategy)。有關爲單個事件選擇多個服務的實現,請參見[依賴注入類型選擇](https://stackoverflow.com/a/34331154)。 – NightOwl888