Как мне зарегистрироваться в Autofac тип, который реализует несколько интерфейсов? - PullRequest
0 голосов
/ 30 мая 2018

У меня есть 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 голосов
/ 30 мая 2018

Вы можете зарегистрировать его следующим образом:

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

, но также обязательно зарегистрируйте StorageHandler и SettingsHandler:

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

После того, как вы построили контейнер, вы сможетеРазрешить StorageHandler и SettingsHandler:

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

Примечание

Также возможно вызвать AsImplementedInterfaces(), если у вас много интерфейсов в классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...