如何向Autofac注册实现多个接口的类型?

时间:2018-05-30 09:51:49

标签: c# interface autofac

我有2个类可以处理2种不同的资源,它们是 SettingsHandler StorageHandler 。 两者都有类似的构造函数:

public class StorageHandler
{
    private readonly IStorageConfig _config;
    private readonly ApiClient _apiClient;

    public StorageHandler(IStorageConfig config, ApiClient apiClient)
    {
        _config = config;
        _apiClient = apiClient;
    }

    /------- ! -------/
}

public class SettingsHandler
{
    private readonly ISettingsConfig _config;
    private readonly ApiClient _apiClient;

    public SettingsHandler(ISettingsConfig config, ApiClient apiClient)
    {
        _config = config;
        _apiClient = apiClient;
    }

    /------- ! -------/

}

然后我有这样的配置:

public class Config: ISettingsConfig, IStorageConfig
{
}

在我的模块类中,我将配置文件注册两次(如果有更多接口则多次注册),如下所示:

builder.RegisterType<Config>().As<ISettingsConfig>().SingleInstance();
builder.RegisterType<Config>().As<IStorageConfig>().SingleInstance();

我希望这会奏效,但我不确定我是否正确这样做。 有人可以帮我一把吗?

1 个答案:

答案 0 :(得分:0)

您可以将其注册为:

builder.RegisterType<Config>()
    .As<ISettingsConfig>()
    .As<IStorageConfig>()
    .SingleInstance();

但请务必注册StorageHandlerSettingsHandler

builder.RegisterType<StorageHandler>().AsSelf();
builder.RegisterType<SettingsHandler>().AsSelf();

构建容器后,您应该能够解析StorageHandlerSettingsHandler

var container = builder.Build();
var storageHandler = container.Resolve<StorageHandler>();
var settingsHandler = container.Resolve<SettingsHandler>();

注意

如果一个类上有很多接口,也可以调用AsImplementedInterfaces()