![](/img/trans.png)
[英]How can I resolve ILog using ServiceStack and Funq.Container
[英]ServiceStack multiple implementations of same interface in Funq.Container
在ServiceStack應用程序中,我將Funq配置為按請求注入會話,如下所示:
container.Register<NHibernate.ISessionFactory>(sessionFactoryForDB1);
container.Register<NHibernate.ISession>(c => c.Resolve<NHibernate.ISessionFactory>()
.OpenSession())
.ReusedWithin(Funq.ReuseScope.Request);
我的服務看起來像這樣,它的工作正常:
public class MyNhAwareService : Service
{
public ISession Session { get; set; }
public object Any(DoSomething request)
{
...
}
}
現在,當我想在其自己的會話工廠中添加第二個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);
我一直在嘗試使用Funq的各種方法,當我發現'RegisterNamed()'方法時,我認為我找到了前進的方法,但這仍然無濟於事,因為我無法使用任何東西除了我的服務中的TryResolve()。
這似乎應該是可能的,但是我正在試圖解決這個問題。我會非常感激任何建議。
你有幾種方法可以解決這個問題。
此選項是為每個NHibernate數據庫創建一個獨特的接口,以便Funq可以唯一地解析它們。
例如:
interface FactoryA : NHibernate.ISessionFactory
{
}
interface FactoryB : NHibernate.ISessionFactory
{
}
然后你可以像現在一樣繼續。 這同樣適用於會話。 有關該過程的更多詳細信息,請參見此處:
如何在ServiceStack.net中使用Funq注冊多個IDbConnectionFactory實例
這個選項我不太熟悉,但您可以使用Funq命名您的實例:
container.Register<NHibernate.ISessionFactory>("FactoryA",sessionFactoryForDB1);
然后在您的服務中,解決它:
ServiceStackHost.Instance.Container.ResolveNamed<NHibernate.ISessionFactory>("FactoryA");
此選項使用服務位置,我個人覺得它不那么有吸引力。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.