2011-02-25 173 views
0

任何人都可以指示我如何整合這些工具的所有3 的最新示例?我找到了一些例子,但看起來過時了。 以下是我找到的例子。如何讓WCF-StructureMap-NHibernate一起工作?

http://www.lostechies.com/blogs/jimmy_bogard/archive/2008/09/16/integrating-structuremap-and-nhibernate-with-wcf.aspx
http://andreasohlund.net/2009/04/27/unitofwork-in-wcf-using-structuremap/ < - 沒有解決的NHibernate
http://blog.coreycoogan.com/2010/05/26/structuremap-wcf-nhibernate-part-1/
http://blog.coreycoogan.com/2010/05/27/structuremap-wcf-nhibernate-part-2/

,我開始嘗試coreycoogan例子,但我遇到了一些問題。 他顯示了創建StructureMap註冊表,其中依賴項被注入到註冊表的構造函數中,但他沒有顯示如何執行 那部分。我從來沒有見過StructureMap 註冊管理機構的例子。所有我見過的例子都有一個無參數的 contstructor。

這是可能的,如果是這樣怎麼樣?我正在調用Bootstrapper類中的 ObjectFactory.Initialize方法,該方法使用默認約定對 調用掃描程序,並調用 LookForRegistries方法。除了 之外,它會找到所有需要注入依賴關係的註冊表類。我會假設,因爲我 沒有正確接線或不可能。

這裏是因爲這是在他的崗位 第2部分註冊表中的示例代碼的一小部分:

/// <summary> 
/// A StructureMap registry for telling the container how to resolve an ISession request. 
/// This must be instantiated and added to the SM configuration so it has an instance of the 
/// SessionFactory to use. 
/// </summary> 
public class WcfNHibernateRegistry : Registry 
{ 
    public WcfNHibernateRegistry(ISessionFactory sessionFactory) 
    { 
     For<NHibernate.ISession>() 
      .Use(() => sessionFactory.GetCurrentSession()); 
    } 
} 
+0

在我看來,您的實際問題無關與WCF或NHibernate的,但更多的線沿線的「如何配置StructureMap當註冊表類需要注入依賴」 ,否? –

+0

是,否,我想找一個很好的例子來說明如何整合這些技術,所以這個問題真的有兩個部分:(1)哪裏是一個好例子;(2)在我選擇的例子中,我如何解決註冊表問題 –

+0

我做了類似的事情,但我沒有時間爲你創建一個可以回答這個問題的樣本,如果你可以把它分解成更具體的問題,我很可能會能夠幫助。 –

回答

0

在問候了StructureMap初始化...

的LookForRegistries方法只能找到具有零參數構造函數的註冊表類。這是有道理的--StructureMap沒有初始化並且可以使用;它沒有準備好注入依賴關係。如果你想在你的Registry類中注入一個依賴項,你需要手動完成。 (如果還有其他方法,我不知道它們。)

如果你從這裏按照'example 1'http://structuremap.net/structuremap/RegistryDSL.htm#section2你可以這樣做,但我相信這個例子假設你將使用生成的Container實例而不是必然是ObjectFactory的靜態方法。 (不知道如何使用特定容器中的註冊類型。)

或者,您可以刪除構造函數參數。我相信這將工作:

public class WcfNHibernateRegistry : Registry 
{ 
    public WcfNHibernateRegistry() 
    { 
     For<ISessionFactory>().Singleton().Use(() => { 
      var cfg = new NHibernate.Cfg.Configuration(); 
      cfg.Configure(); 
      return cfg.BuildSessionFactory(); 
     }); 

     For<ISession>().Use(() => { 
      var fac = ObjectFactory.GetInstance<ISessionFactory>(); 
      return fac.GetCurrentSession(); 
     }); 
    } 
}