← Voltar

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));

Comentários (3)

Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário

Support
Support

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

Дмитрий_
Дмитрий_ Autor

Добрый день

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

Как понять, что: 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

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

Дмитрий_