我有一个带有如下构造函数的类:
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
答案 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
。
你在这里关注的是什么?