Разрешение зависимостей делегата действия с использованием Castle Windsor - PullRequest
0 голосов
/ 17 февраля 2010

У меня есть класс с конструктором, который выглядит так:

public TimedWorker(int timerInterval, Action execute, ILogger logger)

Я использую свободную конфигурацию Castle Windsor, и хотя приведенный ниже конфиг работает, я обеспокоен тем, как я решаю действия. Есть ли лучший способ, чтобы я не всегда разрешал делегат действия одному и тому же?

Component
  .For<IWorker>()
  .ImplementedBy<TimedWorker>()
  .DependsOn(new { timerInterval = TimerInterval })
  .LifeStyle.Transient,

Component.For<Action>()
  .Instance(() => Resolve<SomeService>().SomeMethod())
  .LifeStyle.Transient,

Component.For<ILogger>()
  .ImplementedBy<TraceLogProvider>()
  .LifeStyle.Singleton

Ответы [ 2 ]

3 голосов
/ 17 февраля 2010

Если вам не нужно действие в другом месте, вы можете использовать DynamicParameters:

Component
  .For<IWorker>()
  .ImplementedBy<TimedWorker>()
  .DynamicParameters((kernel, parameters) => {
    parameters["timerInterval"] = TimerInterval;
    parameters["execute"] = new Action(kernel.Resolve<SomeService>().SomeMethod);
  })
  .LifeStyle.Transient, ...
1 голос
/ 17 февраля 2010

[UPDATE]

Хорошо, в этом случае решение Маурисио - лучший путь.


Нет ничего плохого в подходе. Если вы хотите больше гибкости, чем дает .Instance, используйте .UsingFactoryMethod.

Что именно вас здесь волнует?

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