C# Обращение к классу из любого класса

118
27 июня 2021, 10:00

Допустим есть класс Repository, есть входная точка в программу класс Server, в Server'e происходит вызов класса Repository в котором в конструкторе происходит инициализация по типу подключение к БД итд. И есть другой класс Chat который должен обращаться к Repository для отправки сообщений. Как мне из Chat обратиться к Repository что-бы данные которые уже инициализировались не инициализировать их заново а обратиться сразу к методу отправки сообщений который есть в Repository. Сейчас идет обращение к Repository через Server.Repository.SendMessage() где Repository сохранен в виде статичной переменной и представляет из себя partial class, Хотелось бы упростить до Repository.sendMessage().

Answer 1

Как уже писалось, вам нужно использовать dependency injection. .net предоставляет механизмы для этого: https://www.nuget.org/packages/Microsoft.Extensions.DependencyInjection/ Кратко работает это следующим образом:
При старте приложения, вы определяете все возможные зависимости и способ их создания:

var serviceProvider = new ServiceCollection()
    .AddSingleton<Server>()
    .AddSingleton<Chat>()
    .AddSingleton<Reposetory>()
    .BuildServiceProvider();

Теперь, если вам понадобиться объект класса сервера, вы можете получить его следующим образом:

    var server = serviceProvider.GetService < Server>();

И у вас будет готовы экземпляр сервера со всеми нужными ему зависимостями, то есть если в конструкторе, ему передается Repository, то этот Repository будет создан сам без вашего участия. Таким же образом и Repository автоматически получит все, что ему нужно для работы, другие сервисы или конфигурации. Простой туториал можно почитать по ссылке: https://andrewlock.net/using-dependency-injection-in-a-net-core-console-application/