2013-04-23 100 views
3

时如果我的服务有一些初始化代码添加服务初始化的方法,我知道两个选项:使用温莎城堡IoC容器

  1. 实现ISupportInitialize
    专业版:只依赖于.NET本地接口。答案:我通常只使用BeginInit(),所以总是有不必要的空EndInit代码

  2. 实现Castle Core的IInitializable。
    专业:只需要实施一种方法。答案:我必须让我的课程取决于Castle Core。

有没有更好的选择?

+2

您可以创建自己的界面并使用它。你在这里做的是被称为时间耦合,并被许多人认为是一种设计气味。阅读[this](http://blog.ploeh.dk/2011/05/24/DesignSmellTemporalCoupling/)了解更多信息。 – 2013-04-23 10:06:49

+0

@DanielHilgarth如果我创建我自己的界面,Castle Windsor如何知道它应该执行这些代码? – 2013-04-23 10:11:31

+0

它没有。我不知道代码是自动执行的。 – 2013-04-23 10:13:34

回答

6

是的,有:

Component.For<Foo>().OnCreate(foo => foo.WhateverMethodYouWant()); 

的细节是in the documentation

+0

有没有办法为每个实现某个接口的组件触发'OnCreate'? – Steven 2013-04-24 09:46:11

+6

.ConfigureFor (c => c.OnCreate(something)) – 2013-04-24 10:10:07

0

另一种选择可能是将有关的组件转换成Castle设施,在那里你有更明确的控制,但这可能是矫枉过正的。

我只是选择1.冗余EndInit是无关紧要的。