Tôi đã nêu ra câu hỏi này trước nhưng tôi vẫn đang đấu tranh để tìm một ví dụ mà tôi có thể xoay đầu (xin đừng chỉ cho tôi xem dự án Kiến trúc S # arp mà không có ít nhất một số hướng).Làm thế nào tôi có thể thực hiện phiên NHibernate cho mỗi yêu cầu mà không có sự phụ thuộc vào NHibernate?
Cho đến nay tôi đã đạt được sự thiếu hiểu biết liên tục gần trong dự án web của mình. lớp kho của tôi (trong dự án dữ liệu của tôi) có một ISession trong constructor:
public class ProductRepository : IProductRepository
{
private ISession _session;
public ProductRepository(ISession session) {
_session = session;
}
Trong global.asax tôi vạch trần phiên hiện tại và đang tạo ra và xử lý session trên BeginRequest và EndRequest (đây là nơi mà tôi có sự phụ thuộc vào NHibernate):
public static ISessionFactory SessionFactory = CreateSessionFactory();
private static ISessionFactory CreateSessionFactory() {
return new Configuration()
.Configure()
.BuildSessionFactory();
}
protected MvcApplication() {
BeginRequest += delegate {
CurrentSessionContext.Bind(SessionFactory.OpenSession());
};
EndRequest += delegate {
CurrentSessionContext.Unbind(SessionFactory).Dispose();
};
}
và cuối cùng đăng ký StructureMap tôi:
public AppRegistry() {
For<ISession>().TheDefault
.Is.ConstructedBy(x => MvcApplication.SessionFactory.GetCurrentSession());
For<IProductRepository>().Use<ProductRepository>();
}
có vẻ như tôi cần phải triển khai chung riêng của tôi về ISession và ISessionFactory mà tôi có thể sử dụng trong dự án web của tôi và tiêm vào kho của tôi?
Vì vậy, chỉ cần làm rõ - Tôi đang sử dụng NHibernate trong lớp kho lưu trữ của mình và muốn sử dụng yêu cầu phiên cho mỗi (http). Vì vậy tôi đang tiêm một ISession vào các nhà xây dựng kho lưu trữ của tôi (sử dụng structuremap). Hiện nay để tạo và xử lý các phiên trong mỗi yêu cầu tôi đã phải tham khảo NHibernate từ dự án web của tôi. Đây là sự phụ thuộc tôi muốn loại bỏ.
Cảm ơn, Bến
NHibernate là theo tôi không phải là một phụ thuộc xấu. –
Cuộc hội thoại dự án web của tôi với kho lưu trữ và NHibernate là sự phụ thuộc của kho lưu trữ. Nếu nó không phải là một thực tế là tôi muốn phiên mỗi yêu cầu thì tôi chỉ có thể mở các phiên của tôi bên trong lớp kho lưu trữ. Tuy nhiên, tôi muốn phiên mỗi yêu cầu nhưng tôi không muốn dự án web của tôi gắn với NHibernate. –
Marcouiller: Nó vẫn là một sự phụ thuộc. Sự phụ thuộc là sự phụ thuộc. Nếu Ben muốn chuyển ứng dụng của mình sang CouchDB hoặc MongoDB hoặc sử dụng cơ sở dữ liệu đối tượng trong bộ nhớ thì sao? –