我试图注册同一个类的两个示例,但这两个示例最终共享相同的参数值。
我在startup.cs中注册了以下内容:
using Autofac;
using Autofac.Extensions.DependencyInjection;
public void ConfigureContainer(ContainerBuilder builder)
{
// Preferences
builder.RegisterType<PreferencesRetriever>().As<IPreferencesRetriever>().SingleInstance()
.WithParameter("collection", _configureMongo(_mongoUrl, MONGODB_PREFERENCES_COLLECTION))
.Keyed<IPreferencesRetriever>("PreferencesRetriever");
// System Preferences
builder.RegisterType<PreferencesRetriever>().As<IPreferencesRetriever>().SingleInstance()
.WithParameter("collection", _configureMongo(_mongoUrl, MONGODB_SYSTEM_PREFERENCES_COLLECTION))
.Keyed<IPreferencesRetriever>("SystemPreferencesRetriever");
}
并设置了下面的两个控制器:
using Autofac.Features.AttributeFilters;
public class PreferencesController : ControllerBase
{
private readonly IPreferencesRetriever _preferencesRetriever;
private readonly ILogger<PreferencesController> _logger;
public PreferencesController(
[KeyFilter("PreferencesRetriever")] IPreferencesRetriever preferencesRetriever,
ILogger<PreferencesController> logger)
{
_preferencesRetriever = preferencesRetriever;
_logger = logger;
}
...
}
using Autofac.Features.AttributeFilters;
public class SystemPreferencesController : ControllerBase
{
private readonly IPreferencesRetriever _preferencesRetriever;
private readonly ILogger<PreferencesController> _logger;
public SystemPreferencesController(
[KeyFilter("SystemPreferencesRetriever")] IPreferencesRetriever preferencesRetriever,
ILogger<PreferencesController> logger)
{
_preferencesRetriever = preferencesRetriever;
_logger = logger;
}
...
}
无论出于何种原因,两个控制器最终都使用MONGODB_SYSTEM_PREFERENCES_COLLECTION
值。
请让我知道如果我在这里错过了什么。
我很乐意回答任何问题。
1条答案
按热度按时间6tdlim6h1#
您需要在
SystemPreferencesController
和PreferencesController
上启用.WithAttributeFiltering()
。基于文档。