1

我們在代碼中使用了很多泛型。例如ICommandHandler<T> where T is ICommand,ICommandValidator<T>等等可能將NullObject實現註冊爲泛型接口的後備?

並非所有的東西都有ICommandValidator實現。我正在尋找使用NullObject模式,以便我可以提供回退選項以避免必須測試驗證程序是否爲空。

例如

public class NullObjectCommandValidator : ICommandValidator<ICommand> 
{ 
    public bool IsValid(ICommand command) 
    { 
     return true; 
    } 
} 

我們註冊都喜歡:

builder.RegisterAssemblyTypes(assemblies) 
     .AsClosedTypesOf(typeof(ICommandValidator<>)) 
     .InstancePerHttpRequest(); 

我希望能夠註冊NullObjectCommandValidator作爲任何ICommandValidator默認未使用有一個具體的實施例如註冊所有其他ICommandValidator>,然後在最後註冊Null版本並保留現有默認值。

是這樣的可能嗎?

回答

2

您應該將NullObjectCommandValidator更改爲通用類型NullObjectCommandValidator<TCommand>。這樣,您就可以按如下方式來註冊它

builder.RegisterGeneric(typeof(NullObjectCommandValidator<>)) 
    .As(typeof(ICommandValidator<>)); 

NullObjectCommandValidator<TCommand>看起來是這樣的:

public class NullObjectCommandValidator<TCommand> : ICommandValidator<TCommand> 
{ 
    public bool IsValid(TCommand command) 
    { 
     return true; 
    } 
} 
+0

真棒。現在我可以殺了一堆if語句:) – GraemeMiller 2013-05-09 17:58:26

相關問題