[英]Autofac DI migration to ASP.NET Core DI
我有使用 autofac IComponentContext Resolve 解析服務的功能
啟動文件
public void ConfigureContainer(ContainerBuilder builder)
{
builder.RegisterAssemblyTypes(Assembly.GetEntryAssembly())
.AsImplementedInterfaces();
builder.AddDispatchers();
}
builder.AddDispatchers():
public static class Extensions
{
public static void AddDispatchers(this ContainerBuilder builder)
{
builder.RegisterType<CommandDispatcher>().As<ICommandDispatcher>();
builder.RegisterType<Dispatcher>().As<IDispatcher>();
builder.RegisterType<QueryDispatcher>().As<IQueryDispatcher>();
}
}
它是通過它的類型動態選擇 Handler
public class QueryDispatcher : IQueryDispatcher
{
private readonly IComponentContext _context;
public QueryDispatcher(IComponentContext context)
{
_context = context;
}
public async Task<TResult> QueryAsync<TResult>(IQuery<TResult> query)
{
var handlerType = typeof(IQueryHandler<,>)
.MakeGenericType(query.GetType(), typeof(TResult));
dynamic handler = _context.Resolve(handlerType);
return await handler.HandleAsync((dynamic)query);
}
}
我應該怎么做才能將其遷移到內置的 ASP.NET Core DI?
登記:
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<ICommandDispatcher, CommandDispatcher>();
services.AddScoped<IDispatcher, Dispatcher>();
services.AddScoped<IQueryDispatcher, QueryDispatcher>();
}
注入:
public class QueryDispatcher : IQueryDispatcher
{
private readonly IServiceProvider _serviceProvider;
public QueryDispatcher(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public async Task<TResult> QueryAsync<TResult>(IQuery<TResult> query)
{
var handlerType = typeof(IQueryHandler<,>)
.MakeGenericType(query.GetType(), typeof(TResult));
dynamic handler = _serviceProvider.GetService(handlerType);
return await handler.HandleAsync((dynamic)query);
}
}
注意:我使用生命周期范圍是因為您沒有提供有關所需生命周期的任何指示,但您也可以使用AddSingleton
或AddTransient
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.