Информация об изменениях

Сообщение Re[6]: Как лучше сделать плагинную систему сегодня? от 26.12.2014 14:28

Изменено 26.12.2014 14:30 Sinix

Здравствуйте, Shmj, Вы писали:

S>>Для serviceProvider достаточно прописать только источники и передать всем один и тот же провайдер (например через конструктор). Получатель сам заберёт нужное, тем более что выставляемые интерфейсы документируются через extension-методы к serviceProvider.


S>А пример можно?

Так там всё просто,
IServiceProvider provider = new ServiceProvider()
{
  new MyService(), // : IMyService
  new LoggerService(), // : ILoggerService
  ...
};

...
// где-то в другом месте
IMyService x = provider.GetMyService(); // extension method, == provider.Get<IMyService>();

Собственно, всё. Код пишется за полчаса, потом без ломания контракта прикручивается что угодно, например:
* контексты (новые сервисы, скрытие сервиса на время)
* своя логика создания для отдельных сервисов
* фабрики (для однотипных сервисов)
и т.д и т.п.
Re[6]: Как лучше сделать плагинную систему сегодня?
Здравствуйте, Shmj, Вы писали:

S>>Для serviceProvider достаточно прописать только источники и передать всем один и тот же провайдер (например через конструктор). Получатель сам заберёт нужное, тем более что выставляемые интерфейсы документируются через extension-методы к serviceProvider.


S>А пример можно?

Так там всё просто,
IServiceProvider provider = new ServiceProvider()
{
  new MyService(), // : IMyService
  new LoggerService(), // : ILoggerService
  ...
};

...
// где-то в другом месте
IMyService x = provider.GetMyService(); // extension method, == provider.Get<IMyService>();

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