我是IoC和NHibernate的新手,并且在尝试依赖注入的最佳实践方面遇到了很大的困难。我花了最近几天环顾四周并阅读文档,但遗憾的是我发现的文档已经过时或不完整。
例如,这告诉我该怎么做,我但我不知道该怎么做。 XSockets.Net - how to manage NHibernate Session Context
据我所知,根据official documentation,我需要在结构图中使用嵌套容器,以确保为每个请求创建和处理会话。不幸的是,这些示例都是在构建自己的容器的单元测试中设置的。我不知道如何将其应用于MVC。
如果我有这样的存储库
public class Repository : IRepository {
public Repository(ISession session) {
...
}
...
}
我如何做这项工作:
public NHibernateRegistry()
{
ISessionFactory factory = config.BuildSessionFactory();
For<IRepository>.Use<Repository>()
For<ISession>.????????
}
或者我是否以某种方式向后退了?
答案 0 :(得分:0)
因此,事实证明这种行为是自动的 - 我不需要打开它。我做了一个无关的错误,并认为这是问题所在。有些不明确的文档并没有帮助它。 如果您使用的是structuremap.MVC5 nuget包:
SessionFactory _factory;
public NHibernateRegistry()
{
_factory = config.BuildSessionFactory();
For<IRepository>.Use<Repository>()
For<ISession>.Use(() => _factory.OpenSession());
}
这将导致structuremap每个httprequest打开一次会话。当然,你不应该在这里打开会话,因为有很多事情与你想要正确处理的交易,绑定和工作单元有关 - 但这是一个独立的NHibernate超出此问题范围的事情。