MVC Ninject I Не хочу иметь ссылку на уровень данных, но только на уровень обслуживания - PullRequest
2 голосов
/ 27 марта 2012

Я новичок в MVC и Ninject ..... Использование Ninject У меня есть что-то вроде этого в моем Global.asax Application_start ()

ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());

в классе NinjectControllerFactory У меня есть что-то вроде этого

ninjectKernel.Bind<IDbFactory>().To<DbFactory>().InRequestScope(); <-- DBFactory!
ninjectKernel.Bind<IUnitOfWork>().To<UnitOfWork>();                <-- UnitOfwork!
ninjectKernel.Bind<IOrderService>().To<OrderService>();            <-- Service!
ninjectKernel.Bind<IRepository<Order>>().To<Repository<Order>>();  <-- Entities!

ОК, мне не нравится это вообще!

Я не хочу ссылаться на мой уровень данных и слой EF в пользовательском интерфейсе ... Я хотел бы иметь только ссылкуна сервисный уровень и затем передают данные в и из моего пользовательского интерфейса, используя DTO ...

Я создаю экземпляры своих служб, внедряя репозиторий ... например ...

public OrderService(IRepository<Order> OrderRepository)

I 'Я чувствую растерянность и разочарование.Есть ли способ инициализации ninject не в моем пользовательском интерфейсе?

Заранее спасибо !!!

JDBO

Ответы [ 2 ]

7 голосов
/ 27 марта 2012

Вы можете использовать недействительные модули, чтобы разбить ваши привязки на аккуратные маленькие пакеты, которые живут в домене их проекта. Например, вы можете определить свои привязки dbfactory и UOW в DAL, если хотите, а затем просто загрузить все вспомогательные модули, используя руководство по динамической загрузке модулей, предоставленное вики.

https://github.com/ninject/ninject/wiki/Modules-and-the-Kernel

0 голосов
/ 05 марта 2015

Как Гари.S ответил, что динамическая загрузка модуля kernel.Load("*.dll"); - это решение, но для меня было важным осознание того, что вам нужно каким-то образом скопировать несобранные сборки в папку bin проекта UI, чтобы они могли быть найдены Ninject и правильно развернуты.

Возможно, есть лучший способ, но я использовал событие посткомпоновки в Visual Studio для копирования файла (ов) DLL.

...