我有这个问题...... 我有一个VS解决方案与这些项目:持久性,域,服务,用户界面。 现在我的问题是我必须在所有使用nhibernate的项目中引用nhibernate。 我是否有可能仅在Persistence项目中引用nhibernate,并且任何引用Persistence项目的项目也可以使用nhibernate?
我使用StructureMap作为DI容器。我已经通过构造函数为ISession设置了依赖注入。所以我必须在通过ISession的每一层(而不是UI)中引用nhibernate。 我想要的是没有nhibernate.dll及其几乎所有项目中引用的所有依赖dll(bytecode.linfu ...),但仅限于持久性。这有可能吗?
由于
答案 0 :(得分:1)
在Domain项目中,您可以定义数据访问对象的接口。您的NHibernate持久性项目可以引用Domain项目并为数据访问对象提供实现。
您的服务项目可能会引用域而不是持久性。您的服务对象取决于Domain中的数据访问接口。您可以使用DI容器将服务对象连接到Persistence中的NHibernate实现。
将依赖关系Domain -> Persistence
更改为Persistence -> Domain
是控制反转的一个示例。
我可以想象你现在有以下服务:
using Persistence;
using Domain;
public class UserService
{
private Persistence.NHibernateUserRepository _repository;
public UserService (ISession session)
{
_repository = new Persistence.NHibernateUserRepository(session);
// ...
}
// some service methods
}
我建议将其更改为:
using Domain; // no longer using Persistence package
public class UserService
{
private Domain.IUserRepository _repository;
public UserService (Domain.IUserRepository repo)
{
_repository = repo;
// ...
}
// some service methods
}
在您的StructureMap配置中,您配置一个NHibernate会话,您可以将其连接到Persistence.NHibernateUserRepository
。然后,您将UserService
与此Persistence.NHibernateUserRepository
联系起来。我不熟悉StructureMap,所以我无法帮助你解决这些问题。您可能需要阅读: