我有一个ICommand
和ICommandHandler<TCommand>
接口,需要注入工厂:
public class CommandProcessor
{
private readonly Func<Type, ICommandHandler<ICommand>> _handler;
public CommandProcessor(Func<Type, ICommandHandler<ICommand>> handler)
{
_handler = handler;
}
}
具有执行以下操作的能力:
public void Process(ICommand command)
{
var handler = _handler(command.GetType());
if (handler != null)
{
handler.Handle(command);
}
throw ...
}
我试图注册工厂:
builder.Register<Func<Type, ICommandHandler<ICommand>>>(context => type =>
{
var handlerType = context.Resolve(type);
return (ICommandHandler<ICommand>) handlerType;
});
但得到以下异常:
请求的服务“QVocado.Commands.Information.PostProblemCommentCommand”尚未注册。为避免此异常,请注册组件以提供服务,使用 IsRegistered() 检查服务注册,或使用 ResolveOptional() 方法解决可选依赖项。