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<,>));
但它没有用。
我该怎么办?
答案 0 :(得分:1)
您发布的错误消息似乎表明DataSourceHandler<TEntity, TModel>
类型已正确注册为IRequestHandler<DataSourceQuery<TEntity, TModel>, DataSourceResult>
,因为该消息包含该类型的名称。
但看起来它无法实例化。由于此类型的唯一依赖项是ApplicationDbContext
,您是否可以仔细检查您在容器构建器中注册了该类型?