.net 如何注册同一个类的多个示例

uqjltbpv  于 2023-07-01  发布在  .NET
关注(0)|答案(1)|浏览(113)

我试图注册同一个类的两个示例,但这两个示例最终共享相同的参数值。
我在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值。
请让我知道如果我在这里错过了什么。
我很乐意回答任何问题。

6tdlim6h

6tdlim6h1#

您需要在SystemPreferencesControllerPreferencesController上启用.WithAttributeFiltering()
基于文档。

相关问题