[英]Register handler in autofac
正在使用 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<,>));
但它不起作用。
我該怎么辦?
您發布的錯誤消息似乎表明DataSourceHandler<TEntity, TModel>
類型已正確注冊為IRequestHandler<DataSourceQuery<TEntity, TModel>, DataSourceResult>
,因為該消息包含該類型的名稱。
不過,它似乎無法實例化。 由於這種類型的唯一依賴項是ApplicationDbContext
,您能否仔細檢查一下您是否在容器構建器中注冊了該類型?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.