Использовать внедрение зависимостей в статическом классе в .NET Core - PullRequest
1 голос
/ 18 марта 2019

Мне нужно использовать Dependency Injection в статическом классе.

метод в статическом классе нуждается в значении вставленной зависимости.

Следующий пример кода демонстрирует мою проблему:

public static class XHelper
{
    public static TResponse Execute(string metodo, TRequest request)
    {
        // How do I retrieve the IConfiguracion dependency here?
        IConfiguracion x = ...;

        // The dependency gives access to the value I need
        string y = x.apiUrl;

        return xxx;
    }
}

1 Ответ

2 голосов
/ 19 марта 2019

В основном у вас есть две опции:

  1. Измените класс с static на класс экземпляра и введите от IConfiguracion до Инъекция конструктора .XHelper в этом случае должно быть введено в конструктор его потребителей.Пример:

    public class XHelper
    {
        private readonly IConfiguracion config;
    
        public XHelper(IConfiguracion config)
        {
            this.config = config ?? throw new ArgumentNullException(nameof(config));
        }
    
        public TResponse Execute(string metodo, TRequest request)
        {
            string y = this.config.apiUrl;  //i need it
    
            return xxx; //xxxxx
        }
    }
    
  2. Подайте IConfiguracion в метод Execute через Внедрение метода .Пример:

    public static class XHelper
    {
        public static TResponse Execute(
            string metodo, TRequest request, IConfiguracion config)
        {
            if (config is null) throw new ArgumentNullException(nameof(config));
    
            string y = config.apiUrl;
    
            return xxx;
        }
    }
    

Все остальные параметры недоступны, поскольку они могут вызвать запах кода или анти-паттерны.Например, вы можете быть склонны использовать шаблон Service Locator, но это плохая идея, потому что это анти-шаблон .Внедрение свойства, с другой стороны, вызывает временную связь , которая является запахом кода.

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