我有一个具有多层架构的 Web 应用程序,以及与结构图配置分开的层中的处理程序和查询类。我尝试动态注册所有处理程序和查询,但我不能。当我尝试运行应用程序时,我收到运行时错误:
没有注册默认实例,无法自动确定类型“IRequestHandler”没有为 IRequestHandler 指定配置
public DefaultRegistry() {
Scan(
scan => {
scan.TheCallingAssembly();
scan.WithDefaultConventions();
scan.AssemblyContainingType<DefaultRegistry>();
scan.AssemblyContainingType<IMediator>();
scan.ConnectImplementationsToTypesClosing(typeof(IRequestHandler<,>));
scan.ConnectImplementationsToTypesClosing(typeof(IAsyncRequestHandler<,>));
scan.ConnectImplementationsToTypesClosing(typeof(IRequestHandler<>));
scan.ConnectImplementationsToTypesClosing(typeof(IAsyncRequestHandler<>));
scan.ConnectImplementationsToTypesClosing(typeof(INotificationHandler<>));
scan.ConnectImplementationsToTypesClosing(typeof(IAsyncNotificationHandler<>));
scan.ConnectImplementationsToTypesClosing(typeof(IRepository<>));
scan.With(new ControllerConvention());
});
//For<IExample>().Use<Example
For<SingleInstanceFactory>().Use<SingleInstanceFactory>(ctx => t => ctx.GetInstance(t));
For<MultiInstanceFactory>().Use<MultiInstanceFactory>(ctx => t => ctx.GetAllInstances(t));
For<IMediator>().Use<Mediator>();
For<IUnitOfWork>().Use<UnitOfWork>().LifecycleIs<TransientLifecycle>();
For(typeof(IRequestHandler<,>)).DecorateAllWith(typeof(Business.Pipeline.MediatorPipeline<,>));
}
控制器
var query = new GetUserQuery(id);var user = _mediator.Send(query);
询问
public class GetUserQuery : IRequest<User>
{
public GetUserQuery() { }
public GetUserQuery(int id)
{
Id = id;
}
public int Id { get; set; }
}
处理程序
public class GetUserHandler : IRequestHandler<GetUserQuery, User>
{
private readonly IUnitOfWork _uow;
public GetUserHandler(IUnitOfWork uow)
{
_uow = uow;
}
public User Handle(GetUserQuery message)
{
return _uow.UserRepository.Get(message.Id);
}
}