我正在编写 WCF 服务(托管在 IIS 中)。我从 Nuget 下载了 Ninject(3.0.0.0,带有 WCF 扩展)和 NHibernate。我已经在 MVC 上下文中一起使用了这些,但还没有在 WCF 中使用。我希望每次调用该服务都有一个新会话。但我真的找不到关于如何完成它的好教程。
现在,我只是把它放在“NinjectWebCommon.cs”文件中(就像我在 MVC 项目中所做的那样)
private static void RegisterServices(IKernel kernel)
{
var helper = new NHibernateHelper(WebConfigurationManager.ConnectionStrings["xx"].ConnectionString, Assembly.GetAssembly(typeof(Template)));
kernel.Bind<ISessionFactory>().ToConstant(helper.SessionFactory).InSingletonScope();
kernel.Bind<IDbSessionFactory>().To<DbSessionFactory>().InSingletonScope();
kernel.Bind<IDbSession>().To<DbSession>().InRequestScope();
//Repository
//Bind the repository stuff here
}
但这并没有像我期望的那样真正起作用。有人可以告诉我我在这里做错了什么吗?
编辑
更多细节。我可以看到,当我的服务启动时,它会启动一个 NHibernate 会话对象。但它实际上在处置上失败了。当它试图关闭我的会话时,我得到一个 NullReferenceException。我正在使用 Nuget 的所有最新版本。