2010-09-19 147 views
0

我使用StructureMap進行依賴注入,我想用它注入NHibernate會話。我有以下代碼:StructureMap嵌套依賴關係處理

private static Container _container { get; set; } 

static MyClass() 
{ 
    _container = new Container(r => 
    { 
     r.For<ISessionFactory>().Singleton() 
      .Use(NHibernate.GetSessionFactory()); 

     r.For<ISession>().HybridHttpOrThreadLocalScoped() 
      .Use(_container.GetInstance<ISessionFactory>().OpenSession()); 
    }); 
} 

不過,我不禁想,從_container的初始化中引用_container顯得尷尬。這是一種可接受的做法嗎?這是否會在道路上倒退?有沒有更好的辦法?你如何處理需要創建另一個依賴來創建自己的依賴關係?

回答

2

似乎沒有必要使用對容器內容器實例的引用。您可以通過lambda訪問Use-method內的容器。

r.For<ISession>().HybridHttpOrThreadLocalScoped() 
    .Use(c => c.GetInstance<ISessionFactory>().OpenSession()); 

這將確保每次在新的HttpContext中獲取實例。它看起來像你的方式將創建一個單身人士,因爲_container.GetInstance<ISessionFactory>().OpenSession()將只配置一次執行。

+0

這正是我所期待的。謝謝。我錯過了爲lambda表達式提供容器的重載。 – Chris 2010-09-19 17:39:23