Действительно ли я добавляю эту строку для каждого класса в моей модели, используя ninject и NHibernate? - PullRequest
5 голосов
/ 06 августа 2011

Я использую NHibernate и ninject в ASP.Net MVC, , используя эту страницу в качестве руководства .Одна вещь, которую я считаю странной, заключается в том, что в этом коде (на полпути вниз по странице)

public class RepositoryModule : NinjectModule
{
     public override void Load()
     {
        const string connectionString = @"Server=localhost; Port=3306; Database=trucktracker; Uid=root; Pwd='your_own_password';";

        NHibernateHelper helper = new NHibernateHelper(connectionString);
        Bind<ISessionFactory>().ToConstant(helper.SessionFactory).InSingletonScope();

        Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
        Bind<ISession>().ToProvider(new SessionProvider()).InRequestScope();
        Bind<IIntKeyedRepository<Truck>>().To<Repository<Truck>>().InRequestScope();
    }
}

Мне кажется странным, что вам нужна эта строка для каждой модели:

Bind<IIntKeyedRepository<Truck>>().To<Repository<Truck>>().InRequestScope();

Если у меня есть 100 различных таблиц (и, следовательно, моделей), действительно ли мне нужно добавлять эту строку для каждого моего класса?Нет ли лучшего способа, чтобы я мог просто объявить это один раз и использовать наследование для передачи типа в мой контроллер?

1 Ответ

6 голосов
/ 06 августа 2011

Используйте поддержку Open Generics: -

Bind(typeof(IIntKeyedRepository<>)).To(typeof(Repository<>)).InRequestScope();
...