【发布时间】:2012-11-16 16:41:03
【问题描述】:
我已经尝试了三天来弄清楚这个 NHibernatefacility 与 Castle 和 wcf 的关系,它真的变得令人沮丧。
在解决了一大堆错误之后,我来到了这个看起来很明显但我无法解决的错误。
这是我 global.asax 的 Application_Start
container.AddFacility<AutoTxFacility>();
container.Register(Component.For<INHibernateInstaller>().ImplementedBy<NHibernateInstaller>());
container.AddFacility<NHibernateFacility>();
container.AddFacility<WcfFacility>();
container.Register(
Component.For<IAuthService>().ImplementedBy<AuthService>().LifestylePerWcfOperation(),
Component.For<IUserRepository>().ImplementedBy<UserRepository>().LifestylePerWcfOperation(),
Component.For<IActionWebService>().ImplementedBy<ActionWebService>().Named("ActionWebService").LifestylePerWcfOperation(),
Component.For<ISession>().LifeStyle.PerWcfOperation().UsingFactoryMethod(x => container.Resolve<ISessionManager>().OpenSession()));
这适用于第一个请求。之后,它就出现了这个错误。
工厂已废弃,不能再使用。 对象名称:'this'。
此行中我的用户存储库中发生错误
[Transaction]
public virtual User GetUserByCredentials(string email, string password)
{
using (var tx = session())
{
return tx.QueryOver<User>().Where(x => x.Email == email && x.Password == password).SingleOrDefault();
}
}
我感觉这与生活方式有关。我尝试了多种组合但不成功。我现在不知道该怎么办。我带着所有的设施(应该让生活更轻松)进入这个城堡,由于缺乏文档,它真的很复杂。我还没有找到一个下降指南来实现所有这些,更不用说那些不是 4 岁的东西了。
请帮忙!
【问题讨论】:
-
您可以发布更多存储库代码吗?我不确定你为什么有一个会话方法(你的会话不应该被城堡注入吗?)。如果它实际上是一个生活方式问题,那么查看存储库中的 dispose 方法也会很有用。
-
你好安德鲁。我只是在关注文档。 session 是一个 Func
,它被注入到构造函数的存储库中。查看 global.asax。我设法解决了将 Isession 的生活方式设置为 Singleton 的问题。我不知道这样做是否正确,但至少现在正在工作。 -
有过这个帖子的人有同样的问题吗?我又回到问题上了:(
标签: wcf nhibernate castle-windsor isession