Dav*_*ery 3 c# nhibernate servicestack funq
在ServiceStack应用程序中,我将Funq配置为按请求注入会话,如下所示:
container.Register<NHibernate.ISessionFactory>(sessionFactoryForDB1);
container.Register<NHibernate.ISession>(c => c.Resolve<NHibernate.ISessionFactory>()
.OpenSession())
.ReusedWithin(Funq.ReuseScope.Request);
Run Code Online (Sandbox Code Playgroud)
我的服务看起来像这样,它的工作正常:
public class MyNhAwareService : Service
{
public ISession Session { get; set; }
public object Any(DoSomething request)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我想在其自己的会话工厂中添加第二个NHibernate数据库时,问题就出现了:
container.Register<NHibernate.ISessionFactory>(sessionFactoryForDB1);
container.Register<NHibernate.ISession>(c => c.Resolve<NHibernate.ISessionFactory>()
.OpenSession())
.ReusedWithin(Funq.ReuseScope.Request);
// add a different session factory
container.Register<NHibernate.ISessionFactory>(sessionFactoryForDB2);
Run Code Online (Sandbox Code Playgroud)
我一直在尝试用各种方式Funq可以使用,我想我已经找到了前进的时候,我发现了"RegisterNamed()"方法,但仍然没有帮助,因为我不能用什么除了我的服务中的TryResolve().
这似乎应该是可能的,但是我正在试图解决这个问题.我会非常感激任何建议.
你有几种方法可以解决这个问题.
此选项是为每个NHibernate数据库创建一个独特的接口,以便Funq可以唯一地解析它们.
例如:
interface FactoryA : NHibernate.ISessionFactory
{
}
interface FactoryB : NHibernate.ISessionFactory
{
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像现在一样继续.这同样适用于会话.有关该过程的更多详细信息,请参见此处:
如何在ServiceStack.net中使用Funq注册多个IDbConnectionFactory实例
这个选项我不太熟悉,但您可以使用Funq命名您的实例:
container.Register<NHibernate.ISessionFactory>("FactoryA",sessionFactoryForDB1);
Run Code Online (Sandbox Code Playgroud)
然后在您的服务中,解决它:
ServiceStackHost.Instance.Container.ResolveNamed<NHibernate.ISessionFactory>("FactoryA");
Run Code Online (Sandbox Code Playgroud)
此选项使用服务位置,我个人觉得它不那么有吸引力.
| 归档时间: |
|
| 查看次数: |
1217 次 |
| 最近记录: |