0

我沿着城堡windsor教程沿着同樣的路線實施了我的nhibernate持久性工具。如何確保我的持久性設施是線程安全的?

參見:

http://docs.castleproject.org/Windsor.Windsor-Tutorial-Part-Six-Persistence-Layer.ashx http://docs.castleproject.org/Windsor.Windsor-Tutorial-Part-Seven-Lifestyles.ashx

我在我的應用程序已經注意到,當池被釋放,我嘗試訪問一遍我最初得到有關會話工廠誤差在建。

之類的東西,重複項已添加等

我覺得它有少做我的映射和更多做的方式,或當得到執行機構。

以下一些更多的研究,我看到有人說session factory should be thread safe

如果這是正確的,那麼我的假設是我不能單靠Castle Windsor來確保代碼執行只會執行一次?

請在我的持久性設施下面查看我的init方法,我應該在init方法中添加進一步的鎖定級別嗎?

而這會是正確的地方嗎?

我的工廠 - 遵循教程:

public class PersistenceFacility : AbstractFacility 
{ 
    // ... etc. 

    protected override void Init() 
    { 
     Configuration config = BuildDatabaseConfiguration(); 

     Kernel.Register(Component.For<ISessionFactory>().UsingFactoryMethod(_ => config.BuildSessionFactory()).LifestylePerWebRequest()); 
     Kernel.Register(Component.For<ISession>().UsingFactoryMethod(k => k.Resolve<ISessionFactory>().OpenSession()).LifestylePerWebRequest()); 
    } 
} 

我初始化我的容器App_Start,並沒有真正做任何事情特殊,我只是使用的Isession從我的資料庫,所有的解決使用CastleWindsor。

回答

0

溫莎將在您將設施添加到集裝箱時儘可能多地啓動每個設施。

所以如果你這樣做了一次,它將被初始化一次,並且不需要在那裏進行任何鎖定。

在你的代碼中看起來很奇怪的唯一事情就是你正在每個請求上重新創建會話工廠。

+0

如果多個線程同時啓動,那麼可能存在線程問題? – shenku

+0

多線程啓動什麼?不應該有多個線程運行你的引導代碼,如果你這樣做的話,你可能想重新考慮它 –

相關問題