我正在使用 Lamar,并且我添加了在我的控制器中工作的大量依赖项。
当我尝试使用 MediarR 的处理程序时,我必须像这样显式设置 Ctor 依赖项:
serviceRegistry
.ForConcreteType<UpdateStockItemPricingHandler>().Configure
.Scoped()
.Ctor<ClientAppContext>("dbContext").Is<ClientAppContext>();
我将不得不为每个处理程序执行此操作?看起来很繁琐,ClientAppContext依赖已经在容器中注册了,为什么处理程序不自动注入呢?不需要上面的代码。
我是否需要以某种方式让处理程序知道我容器中的所有依赖项?
这是我注册的一些依赖项的示例:
serviceRegistry.Scan(scanner =>
{
scanner.AssemblyContainingType<Ping>();
scanner.ConnectImplementationsToTypesClosing(typeof(IRequestHandler<,>));
scanner.ConnectImplementationsToTypesClosing(typeof(INotificationHandler<>));
scanner.ConnectImplementationsToTypesClosing(typeof(IRequestExceptionAction<>));
scanner.ConnectImplementationsToTypesClosing(typeof(IRequestExceptionHandler<,,>));
});
serviceRegistry.For<MediatR.IMediator>().Use<Mediator>().Transient();
serviceRegistry.For<ServiceFactory>().Use(ctx => ctx.GetInstance);
serviceRegistry
.ForConcreteType<ServiceHealthCheckHandler>().Configure
.Scoped()
.Ctor<IService>("environmentService").Is<EnvironmentService>()
.Transient();
serviceRegistry
.ForConcreteType<GetStockItemPricingHandler>().Configure
.Scoped()
.Ctor<ClientAppContext>("dbContext").Is<ClientAppContext>();
serviceRegistry
.ForConcreteType<UpdateStockItemPricingHandler>().Configure
.Scoped()
.Ctor<ClientAppContext>("dbContext").Is<ClientAppContext>();
var mapperConfig = new MapperConfiguration(mc => mc.AddProfile(new MappingProfile()));
IMapper mapper = mapperConfig.CreateMapper();
services.AddSingleton(mapper);