2011-09-15 52 views
0

我有了我所有的NHibernate映射一個數據項目,我像庫:有沒有可能在我的服務項目中沒有NHibernate的參考?

public class Repository<T> : IRepository<T> 
{ 
    private readonly ISessionFactory _sessionFactory; 

    public Repository() 
    { 
    } 

    public Repository(ISessionFactory sessionFactory) 
    { 
     this._sessionFactory = sessionFactory; 
    } 
} 

我再有,從這個類派生像UserRepository等

public class UserRepository : Repository<IUser>, IUserRepository 
{ 
} 

我具體資料庫使用StructureMap來連接依賴關係。

在我的Services項目中,我不想引用任何與nhibernate相關的東西(如果可能的話),以使其與ORM無關。

問題是,我必須傳遞ISessionFactory在我的服務類中,這些存儲庫將使用正確的?

在我的web應用程序(MVC)中,我只想引用我的服務項目,而不是我的nhibernate Data項目。

該設置是否可行?

回答

1

問題是,我必須傳遞ISessionFactory在我的服務 類,哪些存儲庫將使用正確的?

應該不是這樣。服務層不應該依賴於任何ISessionFactory。它應該只取決於你的存儲庫(更準確地說是抽象)。這是你的倉庫,需要一個ISessionFactory或者更準確地說這些倉庫的NHibernate實現。

所以不需要引用服務層中的任何NHibernate特定的東西。

在我的web應用程序(MVC)中,我只想引用我的服務 項目,而不是我的nhibernate Data項目。

這沒有任何意義。在您的ASP.NET MVC項目中,您必須引用所有內容,否則如果未引用實現程序集,它將不在bin文件夾中,並且您的應用程序將無法工作。

因此,在ASP.NET MVC應用程序中引用它,但實際使用它的唯一地方是您的DI容器的配置,無處不在。您可以將DI容器的配置視爲基礎架構代碼。所有的控制器和服務仍然可以使用抽象,並且從不知道NHibernate特定的類。

2

這裏是NHibernate的大師Ayende Rahien一個有趣的blog pos噸:「總之,我甚至試圖做這樣的事情完全反對。」

相關問題