API автоматической регистрации Register
пропускает open-generi c реализации, такие как UpdateCommandHandler<T>
, потому что эти типы обычно требуют специальной обработки. Вместо этого Register
выберет только не-generi c реализации.
Чтобы зарегистрировать эту open-generi c реализацию, вам нужно будет явно зарегистрировать ее:
container.Register(typeof(ICommandHandler<>), typeof(UpdateCommandHandler<>));
В качестве альтернативы, если у вас есть много реализаций open-generi c, которые могут быть зарегистрированы в любом конкретном порядке, вы можете автоматически зарегистрировать все не-generi c и open-generi c реализации (за исключением декораторов) следующим образом:
var handlerTypes =
container.GetTypesToRegister(typeof(ICommandHandler<>), new[] { modelAssembly },
new TypesToRegisterOptions { IncludeGenericTypeDefinitions = true });
container.Register(typeof(ICommandHandler<>), handlerTypes);