Внедрение зависимостей не имеет значения для класса non-stati c и метода stati c в c# - PullRequest
2 голосов
/ 01 апреля 2020

У меня есть код, загруженный с AWS для подписи версии 4. Их код выглядит следующим образом:

public class PresignedUrl
{
     public static void Run(string a, string b, string c)
     {
     }
}

Я хочу применить внедрение зависимостей, чтобы использовать зарегистрированный сервис конфигурации как синглтон. Так что это может выглядеть примерно так:

using MyNamespace.Services.Interfaces;

public class PresignedUrl
{
     private static string _awsAccessKeyID;
     private static string _awsSecretKey;

     public PresignedUrl(IMyConfigurationService config)
     {
        _awsAccessKeyID = config.AWSAccessKeyID;
        _awsSecretKey = config.AWSSecretKey;
     }

     public static void Run(string a, string b, string c)
     {
     }
}

Но проблема в том, что внутри config.AWSAccessKeyID и config.AWSSecretKey нет никакого значения. Но в других нестати c метод это имеет. Когда я отлаживаю его, 2 упомянутые переменные равны нулю. Как я могу это исправить?

1 Ответ

2 голосов
/ 01 апреля 2020

Если для PresignedUrl имеется конструктор non-stati c, поля _awsAccessKeyID и _awsSecretKey stati c не будут иметь назначенных значений, пока вы не запустите код в конструкторе.

Когда вы создаете экземпляр класса PresignedUrl, вы можете получить доступ к _awsAccessKeyID и _awsSecretKey из методов stati c и non-stati c:

        PresignedUrl.Run("a", "b", "c");

        var config = new MyConfigurationService
        {
            AWSAccessKeyID = "id",
            AWSSecretKey = "key"
        };
        var instance = new PresignedUrl(config);

        PresignedUrl.Run("a", "b", "c");
        instance.NonStatiacRun("a", "b", "c");

Вывод:

_awsAccessKeyID: 
_awsSecretKey: 
_awsAccessKeyID: id
_awsSecretKey: key
_awsAccessKeyID: id
_awsSecretKey: key

https://dotnetfiddle.net/Jz1hIB

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