是否可以在不指定實施類型的情況下使用RegisterConditional
(類似於Register
的工作方式,但是有條件)?在條件下注冊開放式仿製藥
我正在使用Simple Injector爲我的CQRS/MVC應用程序進行流暢的驗證。到現在爲止,登記驗證(即都使用MVC和由CQRS堆棧裝飾管)一直簡單:
container.Register(typeof(IValidator<>), assemblies, lifestyle);
container.RegisterConditional(
typeof(IValidator<>),
typeof(ValidateNothingDecorator<>),
Lifestyle.Singleton,
c => !c.Handled)
新的要求意味着我需要實現類似於valiators的東西,但提供警告。我不想使用Fluent驗證的內置「錯誤級別」出於各種原因,這意味着我需要爲給定的類型創建額外的驗證程序,當然會爲單一類型的驗證錯誤提供多個註冊。
我想什麼做的是註冊任何實現IValidator<>
除如果它也實現了IProvideWarnings
,但我不想列出每類註冊
public class MyCommand : IDefineCommand {...}
public class ValidateMyCommand : IValidator<MyCommand> {...}
public class ProvideWarningsForMyCommand : IValidator<MyCommand>, IProvideWarnings {...}
...
// would like something like... (this obviously does not work)
container.RegisterConditional(
typeof(IValidator<>),
assemblies,
lifestyle,
c => !c.ImplementationType.GetInterfaces().Contains(typeof(IProvideWarnings)));
我的退路是要找到所有類型實現IValidator<>
但不是IProvideWarnings
並將其傳遞到Register
,但是,我寧願在註冊調用中使用謂詞而不是其他查找。
謝謝
謝謝,這比我的代碼更加整潔,而且我沒有意識到(或者至少沒有深入到足以認識到使用)'GetTypesToRegister'。我會用這個! – AndrewP