1

私たちのコードでは多くのジェネリックを使用しています。たとえばICommandHandler<T> where T is ICommandICommandValidator<T>などなど

すべてに ICommandValidator が実装されているわけではありません。NullObject パターンを使用して、バリデーターが null かどうかをテストする必要がないようにフォールバック オプションを提供できるようにしようとしていました。

例えば

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

次のようにすべて登録します。

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

他のすべての ICommandValidators<> を登録し、最後に Null バージョンを登録して既存のデフォルトを保持するようなプロセスを使用して、具体的な実装を持たない ICommandValidator のデフォルトとして NullObjectCommandValidator を登録できることを望んでいました。

このようなことは可能ですか?

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 に答える