以前我設法設置我的統一性,每次提供一個新的DataContext到我的Repository項目。它效果很好。Unity:在application_BeginRequest中使用相同的datacontext?
但是,例如,我在一個WCF方法,打開2個服務,這反過來打開2個資料庫(存儲庫模式)..我希望能夠在同一個wcf方法內重複使用相同的datacontext。
所以我一直在尋找RegisterInstance,但我檢查了datacontext的GetHashCode及其每次不同。我認爲團結將首先檢查兒童容器每次我認爲我有一個實例設置 - 見下面
這是我的團結,執行一次!
container.RegisterType<MyDataContext>(new TransientLifetimeManager(),
new InjectionConstructor())
然後我嘗試下的Application_BeginRequest在Global.asax的配置 - 但也許因爲它似乎進入了多次,這是不理想..運行WCF服務,即使有人調用WCF方法
前protected void Application_BeginRequest(object sender, EventArgs e)
{
Bootstrapper.ConfigureDataContextContainer();
}
這裏是我的configureDataContextContainer
public static void ConfigureDataContextContainer()
{
if (childContainer == null) // I have to do this otherwise it executes multiple times.
{
childContainer = Bootstrapper.Container.CreateChildContainer();
childContainer.RegisterInstance<MyDataContext>
(container.Resolve<MyDataContext>()); // I Presume i create an instance here
}
}
正如我在WCF方法說我出口2個服務,這反過來又開闢了「自己的」程序存儲庫內搭s在一個DataContext
要解決問題的BeginRequest我可以註冊datacontext作爲一個實例(如果它的工作:-))每個WCF方法我有,但它似乎有點漫長。
當然,它的輸入是每個連接(不是會話)都有自己的DataContext。
我在處理datacontext的時候處理了我的倉庫...現在(如果我能得到它的工作)我認爲我需要在EndRequest中處理這個..否則,如果一個服務完成並處置DataContext和其他服務沒有finsihed然後我會得到問題。
我希望我已經很好地解釋了這一點,:-)
總結是每個WCF方法必須使用自己的DataContext的,一個Web方法可以致電超過1個服務(庫模式),這反過來將調用其這個存儲庫需要在構造函數上使用datacontext註冊 - 但是當前在同一個WCF方法中,多個服務會調用這些存儲庫,並且它們會獲得自己的DataContext。
如果我能澄清什麼,請讓我知道
感謝
編輯
忘記提到我是多麼的團結得到解決的事情...我簡單的調用這個容器(不子容器)上,後者又調用程序存儲庫
using (IOfficeService officeService = Bootstrapper.Container.Resolve<IOfficeService >())
{
謝謝邁克爾,但「PerRequestLifetimeManager」將會給整個同樣的DataContext - 即在每一個進來的請求?因此調用不同wcf方法的不同客戶端都將獲得相同的DataContext? – 2009-11-08 23:34:28
這意味着在請求中將返回相同的實例。基本上,每個請求都會有它自己的單例。不同的客戶端不會共享同一個實例。 – 2009-11-08 23:59:12
太棒了,我一開始是在摸我的頭,因爲我找不到perRequestLifeTimeManager ..但我設法在網上找到一個...它完美的工作..謝謝。 – 2009-11-09 10:55:28