使用Castle Windsor行动委托依赖性解决方案

时间:2010-02-17 10:57:08

标签: dependency-injection castle-windsor

我有一个带有如下构造函数的类:

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

我正在使用Castle Windsor流畅的配置,虽然下面的配置有效,但我担心我解决Action的方式。有没有更好的方法,以便我不总是将行动代表解决同样的事情?

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 个答案:

答案 0 :(得分:3)

如果您在其他地方不需要Action,可以使用DynamicParameters:

Component
  .For<IWorker>()
  .ImplementedBy<TimedWorker>()
  .DynamicParameters((kernel, parameters) => {
    parameters["timerInterval"] = TimerInterval;
    parameters["execute"] = new Action(kernel.Resolve<SomeService>().SomeMethod);
  })
  .LifeStyle.Transient, ...

答案 1 :(得分:1)

<强> [UPDATE]

好的,在这种情况下,Mauricio的解决方案是最佳方式。


这种方法没有错。 如果您想要比.Instance更灵活,请使用.UsingFactoryMethod

你在这里关注的是什么?