2013-04-23 90 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是無關緊要的。