可以将NullObject实现注册为泛型接口的回退



我们在代码中使用了很多泛型。例如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;
    }
}

最新更新