在autofac中注册处理程序

时间:2017-10-13 20:37:54

标签: c# asp.net-core autofac asp.net-core-2.0 mediatr

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

  

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

我的查询:

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<,>));

但它没有用。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

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

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