0

我正在使用 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);
4

0 回答 0