1

我们在代码中使用了很多泛型。例如ICommandHandler<T> where T is ICommandICommandValidator<T>等等等等

并非所有东西都有 ICommandValidator 实现。我一直在寻找使用 NullObject 模式,以便我可以提供一个回退选项以避免必须测试验证器是否为空。

例如

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

我们都像这样注册:

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

我希望能够将 NullObjectCommandValidator 注册为任何没有具体实现的 ICommandValidator 的默认值,这些 ICommandValidator 使用注册所有其他 ICommandValidators<> 等过程,然后在最后注册 Null 版本并保留现有默认值。

这样的事情可能吗?

4

1 回答 1

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;
    }
}
于 2013-05-09T15:41:13.603 回答