Внедрение зависимостей в библиотеки классов? ⇐ C#
-
Anonymous
Внедрение зависимостей в библиотеки классов?
Я пытался найти простые решения для внедрения зависимостей в библиотеки классов.
Я попытался решить эту проблему с помощью простого решения, и оно, кажется, работает нормально.
Вот что я сделал.
[*]Создайте глобальный статический класс (в отдельной библиотеке классов): Пространство имен
CompositionRoot { Зависимости публичного статического класса { общедоступный статический IServiceProvider? Поставщик услуг = ноль; } } [*]Создайте службу и добавьте ее в IServiceCollection (из Main). IServiceCollection Services = new ServiceCollection(); IScriptRepository scriptRepository = новый ScriptRepository( SensorDataConnectionString, "скрипты", ControllerName, _logger); Services.AddSingleton(scriptRepository); [*]Создайте IServiceProvider и добавьте его в CompositionRoot (из Main): IServiceProvider serviceProvider = Services.BuildServiceProvider(); CompositionRoot.Dependities.ServiceProvider = serviceProvider; [*]"Внедрить" объект службы (в другую библиотеку классов) частный IScriptRepository только для чтения _scriptRepository; общественный BuildingController() { _scriptRepository= CompositionRoot.Dependities.ServiceProvider!.GetService()!; } Я продолжаю читать, что это может быть «анти-шаблон», но не совсем понимаю, почему.
Каковы потенциальные проблемы при таком подходе?
Я пытался найти простые решения для внедрения зависимостей в библиотеки классов.
Я попытался решить эту проблему с помощью простого решения, и оно, кажется, работает нормально.
Вот что я сделал.
[*]Создайте глобальный статический класс (в отдельной библиотеке классов): Пространство имен
CompositionRoot { Зависимости публичного статического класса { общедоступный статический IServiceProvider? Поставщик услуг = ноль; } } [*]Создайте службу и добавьте ее в IServiceCollection (из Main). IServiceCollection Services = new ServiceCollection(); IScriptRepository scriptRepository = новый ScriptRepository( SensorDataConnectionString, "скрипты", ControllerName, _logger); Services.AddSingleton(scriptRepository); [*]Создайте IServiceProvider и добавьте его в CompositionRoot (из Main): IServiceProvider serviceProvider = Services.BuildServiceProvider(); CompositionRoot.Dependities.ServiceProvider = serviceProvider; [*]"Внедрить" объект службы (в другую библиотеку классов) частный IScriptRepository только для чтения _scriptRepository; общественный BuildingController() { _scriptRepository= CompositionRoot.Dependities.ServiceProvider!.GetService()!; } Я продолжаю читать, что это может быть «анти-шаблон», но не совсем понимаю, почему.
Каковы потенциальные проблемы при таком подходе?
Мобильная версия