DI в S# API
Atom Ответить
16.06.2019


Добрый день

В https://doc.stocksharp.r...d6-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));

Теги:


Спасибо:




3 Ответов
Support

Фотография
Дата: 16.06.2019
Ответить


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

Дмитрий Антипов

Фотография
Курсы Благотворитель
Дата: 17.06.2019
Ответить


Добрый день

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

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

Фотография
Дата: 20.06.2019
Ответить


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


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy