Ничего себе, что много комментариев, почему люди не отвечают на вопрос, а не говорят кому-то, что они не хотят делать то, что они явно делают. В любом случае, мы надеемся, что это сохранит оба лагеря.
Если вы используете стандартный класс AppSettings с одним открытым конструктором, который принимает конфигурацию IConfiguration, которая может использоваться для заполнения всех свойств AppSettings, это сохраняет возможность инъекции зависимостей.
Если в конце конструктора установлено статическое свойство Current, указывающее на текущий экземпляр AppSettings, это позволит нам получить доступ к настройкам с этой точки через статическое свойство без необходимости дальнейшей инъекции.
Если мы создадим статический метод «GetCurrentSettings» по умолчанию, чтобы получить настройки из json-файла, это можно использовать как экземпляр по умолчанию, так что если «Current» вызывается и имеет значение null, мы просто отправляемся выключить и заполнить настройки из файла. Вот пример того, что я имею в виду ...
public class AppSettings
{
private static AppSettings _appSettings;
public string AppConnection { get; set; }
public AppSettings(IConfiguration config)
{
this.AppConnection = config.GetValue<string>("AppConnection");
// Now set Current
_appSettings = this;
}
public static AppSettings Current
{
get
{
if(_appSettings == null)
{
_appSettings = GetCurrentSettings();
}
return _appSettings;
}
}
public static AppSettings GetCurrentSettings()
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables();
IConfigurationRoot configuration = builder.Build();
var settings = new AppSettings(configuration.GetSection("AppSettings"));
return settings;
}
}
Так из этого вы могли бы позвонить в любую точку кода AppSettings.Current.AppConnection
Если он был создан экземпляр, используя DI впрыскиваемого версию можно извлечь в противном случае версия по умолчанию будет взята из файла appsettings.json. Я сомневаюсь, что это удовлетворяет всех, и я не уверен, что объяснил это очень хорошо, но, надеюсь, это имеет смысл.
http://stackoverflow.com/questions/38572081/access-app-key-data-from-class-libraries-in-net-core-asp-net-core вы это видели? – DanielGatti
@ DanielGatti Ответы используют инъекции. Не то, что я ищу. Опять же, это мой класс полезности. Это не сервис, не имеющий интерфейса, не следует вводить. Все, что вам нужно сделать, это следующее: UtilityClass.DoSomething(); –
Должны ли методы быть статическими? Может ли каждый класс, который должен использовать Утилиту, просто иметь частный член типа Utility, который устанавливается/создается при создании объекта класса? – BackDoorNoBaby