2009-09-14 64 views
1

我正在嘗試爲我的公司設計一個基礎架構庫。庫將具有典型的組件,如日誌記錄,異常處理,電子郵件等。這些組件將被我們環境中託管的所有ASP.Net應用程序使用(因此託管環境是我的控制權)。用於多個ASP.Net應用程序的一個DI容器

我的設計第一步是我不喜歡ASP.nEt應用程序直接引用庫組件。所以我想在運行時注入這些依賴。我已經評估了不少DI容器(unity,spring.net等)

但是我不需要做的就是強制所有的ASP.Net應用程序使用這個DI容器。他們將得到一個接口DLL的所有庫組件和一些類型的工廠的DLL,這將給他們的具體實例的組成部分。

我的問題是最好的方式來設計這個工廠DLL,以便只有一個DLL可以服務所有的ASP.Net應用程序?我可以使用一個DI容器來爲所有的ASP.Net應用程序提供服務嗎?

回答

1

嗯,你可以簡單地定義一個容器接口是這樣的:

public interface IContainer 
{ 
    T Resolve<T>(); 
} 

(當然,如果你需要,你可以添加更多的方法)。然後,您可以根據您選擇的DI容器創建此IContainer界面的具體實施。

這樣的具體實現可以封裝應用程序在註冊組件方面需要的所有配置。

您的ASP.NET應用程序會簡單地使用IContainer接口並調用Resolve方法來獲取必要組件的實例。

+0

感謝您的回答Mark ...我想我沒有以正確的方式提出我的問題。我的問題不是我有多個DI容器來決定。我將只有一個DI容器。我的郵件問題是多個ASP.Net應用程序將如何使用該DI容器。更像是一個單一的DI容器(單個包裝類超過DI容器)...我希望這是有道理的,或者如果不是,可以讓每個ASP.Net應用程序創建一個包裝類的實例,並且DI容器負責創建庫組件.. – rauts 2009-09-14 09:46:56

+0

@rauts:那你爲什麼不直接在global.asax(或類似的地方)中創建所選容器的實例?這就是整個想法... – 2009-09-14 11:06:46

+0

@rauts:看看這個SO答案,解釋我的意思是我以前的評論:http://stackoverflow.com/questions/1410719/design-where-should-objects-be-登記時使用windsor/1410738#1410738 – 2009-09-14 11:11:03

相關問題