我沿着城堡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。
如果多個線程同時啓動,那麼可能存在線程問題? – shenku
多線程啓動什麼?不應該有多個線程運行你的引導代碼,如果你這樣做的話,你可能想重新考慮它 –