1

Autofac 和 MediatR 正在使用中。我正在尝试在 ContainerBuilder 中注册处理程序,但它总是错误

无法为服务类型 'MediatR.IRequestHandler'2[DataSourceQuery'2[TEntity,TModel],Kendo.Mvc.UI.DataSourceResult]' 实例化实现类型 'DataSourceHandler`2[TEntity,TModel]'

我的查询:

public class DataSourceQuery<TEntity, TModel> : IRequest<DataSourceResult>
        where TEntity : class, IEntityBase
        where TModel : class
    {
        public DataSourceRequest Request { get; set; }
    }

处理程序:

public class DataSourceHandler<TEntity, TModel> : IRequestHandler<DataSourceQuery<TEntity, TModel>, DataSourceResult>
        where TEntity : class, IEntityBase
        where TModel : class
    {
        private readonly ApplicationDbContext context;

        public DataSourceHandler(ApplicationDbContext context)
        {
            this.context = context;
        }

        public DataSourceResult Handle(DataSourceQuery<TEntity, TModel> message)
        {
            return context.Set<TEntity>()
                .ProjectTo<TModel>()
                .ToDataSourceResult(message.Request);
        }
    }

我尝试以不同的方式注册它,例如:

builder.RegisterGeneric(typeof(DataSourceHandler<,>)).As(typeof(IRequestHandler<,>))
                .AsImplementedInterfaces();

        builder.RegisterGeneric(typeof(DataSourceHandler<,>)).As(typeof(IRequestHandler<,>))
            .InstancePerDependency();

        builder.RegisterAssemblyTypes(typeof(DataSourceHandler<,>).GetTypeInfo().Assembly)
            .AsClosedTypesOf(typeof(DataSourceHandler<,>)).AsImplementedInterfaces();

        builder.RegisterGeneric(typeof(DataSourceHandler<,>))
            .As(typeof(IRequestHandler<,>));

        builder.RegisterAssemblyTypes(typeof(DataSourceHandler<,>).GetTypeInfo().Assembly)
            .AsClosedTypesOf(typeof(IRequestHandler<,>));

但它不起作用。

我应该怎么办?

4

1 回答 1

1

您发布的错误消息似乎表明该DataSourceHandler<TEntity, TModel>类型已正确注册为IRequestHandler<DataSourceQuery<TEntity, TModel>, DataSourceResult>,因为该消息包含该类型的名称。

不过,看起来它无法实例化。由于这种类型的唯一依赖项是ApplicationDbContext,您可以仔细检查您在容器构建器中注册了该类型吗?

于 2017-10-17T03:12:20.353 回答