我已经按照城堡温莎教程按照相同的思路实现了我的 nhibernate 持久性工具。
看:
http://docs.castleproject.org/Windsor.Windsor-Tutorial-Part-Six-Persistence-Layer.ashx http://docs.castleproject.org/Windsor.Windsor-Tutorial-Part-Seven-Lifestyles.ashx
我在我的应用程序中注意到,当池被释放并尝试再次访问它时,我最初会收到与正在构建的会话工厂相关的错误。
诸如添加了重复键之类的东西。
我认为这与我的映射关系不大,而与设施执行的方式或时间有关。
经过更多研究,我看到人们说会话工厂应该是线程安全的?
如果这是正确的,那么我的假设是我不能单独依靠 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 解决。