我们在代码中使用了很多泛型。例如ICommandHandler<T> where T is ICommand
, ICommandValidator<T>
等
并不是所有的东西都有ICommandValidator实现。我希望使用NullObject模式,这样我就可以提供一个后退选项,以避免必须测试验证器是否为空。
例如public class NullObjectCommandValidator : ICommandValidator<ICommand>
{
public bool IsValid(ICommand command)
{
return true;
}
}
我们都注册如下:
builder.RegisterAssemblyTypes(assemblies)
.AsClosedTypesOf(typeof(ICommandValidator<>))
.InstancePerHttpRequest();
我希望能够注册NullObjectCommandValidator作为任何ICommandValidator的默认值,没有使用像注册所有其他ICommandValidators<>这样的过程的具体实现,然后在最后注册Null版本并保留现有的默认值。
这样的事情可能吗?
您应该将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;
}
}