Возможно ли, чтобы в моем проекте Services не было ссылок на NHibernate? - PullRequest
0 голосов
/ 15 сентября 2011

У меня есть проект данных, который имеет все мои отображения 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 в мой класс сервисов, который репозитории будут использовать правильно?

В моем веб-приложении (MVC) я ТОЛЬКО хочу сослаться на мой сервисный проект, а не на проект nhibernate Data.

Возможна ли эта настройка?

Ответы [ 2 ]

2 голосов
/ 15 сентября 2011

Вот интересный блог pos t от гуру nHibernate Айенде Рахиен: «Короче, я полностью против того, чтобы даже пытаться делать что-то подобное».

1 голос
/ 15 сентября 2011

Проблема в том, что мне нужно передать ISessionFactory в моем классе служб, который будет правильно использовать хранилища?

Это не должно иметь место.Сервисный уровень не должен зависеть от ISessionFactory.Это должно зависеть только от ваших репозиториев (точнее абстракций).Именно вашим репозиториям потребуется ISessionFactory или, точнее, реализация NHibernate этих репозиториев.

Так что нет необходимости ссылаться на какие-либо специфические вещи NHibernate в слое обслуживания.

В моемвеб-приложение (MVC), я ТОЛЬКО хочу сослаться на мой сервисный проект, а не на проект nhibernate Data.

Это не имеет никакого смысла.В вашем проекте ASP.NET MVC вы должны ссылаться на все, в противном случае, если на сборку реализации нет ссылки, она не будет в папке bin, и ваше приложение не будет работать.

Так что ссылаться на это в ASPПриложение .NET MVC, но единственное место, где вы будете его использовать, - это конфигурация вашего DI-контейнера, больше нигде.Вы можете рассматривать настройку контейнера DI как код инфраструктуры.Все контроллеры и службы по-прежнему будут работать с абстракциями и никогда не будут знать о конкретных классах NHibernate.

...