2

article之後articlearticle之後,關於在IIS中使用IOC容器(Unity,Windsor等)的任何討論涉及創建自定義ServiceHostFactory和自定義ServiceHost。簡化在WCF中使用IOC容器

,我可以看到的唯一原因,是讓一個自定義的服務行爲,與IInstanceProvider相關的有效載荷,可以適用於所有服務。所以我想通過anonymous service configuration來理解爲什麼整個事情沒有被簡化。這種配置將允許將自定義行爲應用於所有服務,而無需使用自定義ServiceHostFactory和自定義服務主機。

這麼說,我能想象的定製服務主機將是必要的唯一原因是,如果自定義IInstanceProvider與每個WCF實例或上下文實例回收。當然,我希望每次啓動IIS ServiceHost時,IOC容器綁定只能建立一次,而不是重複或不規則。

如果我的自定義IInstanceProvider確實正在零星迴收,那麼我可以將我的IOC容器放入一個自定義服務主機 - 以確保它將盡可能長時間保持。

但同樣,如果我的自定義IInstanceProvider將持續只要內置服務主機,那麼爲什麼不跳過定製服務主機工廠和定製服務的主機?事實上,如果我將IOC容器放入我的自定義IInstanceProvider的靜態成員中,那麼IInstanceProvider是否被不規則地回收並不重要。它來了整圈:爲什麼我需要或想要一個自定義的ServiceHostFactory和自定義的ServiceHost來使用帶有WCF的IOC容器?

回答

1

有趣的問題!我可以想到這樣做的唯一原因是您不希望使用永遠不會更改的項目(即您的WCF服務使用的IoC容器)混亂您的app.config。我試圖將我對app.config的使用限制爲最終用戶/開發人員可能想要更改而不進行重新編譯(大多數情況下不需要太多)的事情。這使得它更具可讀性,通過程序指定配置通常更容易,因爲與配置文件相比,在程序代碼中更好地支持智能感知和編譯時檢查。

然而,這種說法可能並不適用於您鏈接到的第一篇文章,是因爲他們實際上是通過在app.config建立自己的IoC容器。所以在這種情況下它可能是雙重標準。我從來沒有真正明白爲什麼人們想通過外部配置文件設置所有的依賴關係。在大多數情況下,將app.config中的靜態配置存儲在我看來似乎有點矯枉過正。

2

嘛。這是因爲大多數IoC/WCF集成(如mine)不僅僅是創建您的服務(具有它的依賴關係)。

定製壽命/處置

一切都應該得到適當的清理當一個請求已經結束。您的servcice和您的IoC類使用不同的生命週期。

的請求的結束不能只用InstanceProvider的幫助下被檢測到。

IContractBehavior/IServiceBehavior接口

可以在容器註冊行爲和automatically讓他們添加到您的WCF服務。

2

就個人而言,我使用的是設計,你不需要任何ServiceHostFactoryServiceHostServiceBehavior,並且InstanceProvider組合,你不必在你的.svc文件註冊工廠的粉絲。我喜歡我的WCF服務,因爲它只是一個消息傳遞體系結構上的一個非常薄的層,並且這可以讓您避免使用此WCF集成。你可以閱讀更多關於這樣的設計here