← Back

DI в S# API

Добрый день

В https://doc.stocksharp.ru/html/b5725b73-8ba6-46d6-b456-cba5f6678f91.htm ничего не нашел.

Опишите пожалуйста, что происходит за кулисами (аналог кода) при регистрации следующих сервисов:

  1. ConfigManager.RegisterService<IEntityRegistry>(EntityRegistry);
  2. ConfigManager.RegisterService(EntityRegistry.Storage);
  3. ConfigManager.RegisterService<ISecurityStorage>(EntityRegistry.Securities);
  4. ConfigManager.RegisterService(EntityRegistry.Portfolios);
  5. СonfigManager.RegisterService<IConnector>(Connector);
  6. ConfigManager.RegisterService<ISecurityProvider>(Connector);
  7. ConfigManager.RegisterService<IPortfolioProvider>(Connector);
  8. ConfigManager.RegisterService(new PortfolioDataSource(Connector));
  9. ConfigManager.RegisterService<IStudioCommandService>(new StudioCommandService());
  10. ConfigManager.RegisterService<IExchangeInfoProvider>(new StorageExchangeInfoProvider(EntityRegistry));

Comments (3)

Login or Create account, Log in or register to leave a comment

Support
Support

Это своего рода глобальный словарь. Ключом выступает тип сервиса, значением сам сервис. Как таковое, при регистрации ничего не выполняет больше. Основная нагрузка идёт на компоненты (графические и не только), которым необходима информация о списке всех инструментов, портфелей и т.д. Они берут эту информацию из сервисов.

Дмитрий_
Дмитрий_ Author

Добрый день

Я имел в виду детали реализации.

Как понять, что: ConfigManager.RegisterService<IEntityRegistry>(EntityRegistry); - недостаточно для регистрации EntityRegistry и нужно еще СonfigManager.RegisterService(EntityRegistry.Storage); ConfigManager.RegisterService<ISecurityStorage>(EntityRegistry.Securities); ConfigManager.RegisterService(EntityRegistry.Portfolios); но при этом не нужно регистрировать, допустим EntityRegistry.PositionStorage

Как догадаться, что storageRegistry получаем как var storageRegistry = ConfigManager.GetService<IStorageRegistry>(); а не var storageRegistry = new StorageRegistry();

Как узнать, что после регистрации PortfolioProvider ConfigManager.RegisterService<IPortfolioProvider>(Connector); нужно еще регистрировать и PortfolioDataSource ConfigManager.RegisterService(new PortfolioDataSource(Connector));

Для чего и почему нужно регистрировать ConfigManager.RegisterService<IExchangeInfoProvider>(new StorageExchangeInfoProvider(entityRegistry)); а не ConfigManager.RegisterService<IExchangeInfoProvider>(new InMemoryExchangeInfoProvider());

и т.д.

Support
Support

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

Дмитрий_