2012-03-27 52 views
2

我是新的MVC和Ninject ..... 使用Ninject我在我的Global.asax Application_start()中有這樣的東西,MVC Ninject我不想參考數據層,但只有服務層

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! 

好吧,我不喜歡它了!

我不想在UI中引用我的數據層和EF層...我想只參考服務層,然後使用DTO將數據傳遞到我的用戶界面...

創建注入庫...例如我的服務實例...

public OrderService(IRepository<Order> OrderRepository) 

我感到困惑和沮喪。有沒有辦法在我的UI中初始化ninject?

在此先感謝!

JDBO

回答

7

您可以使用ninject模塊的結合闖入了他們的生活工程領域內的整潔的小包裝。例如,如果您願意,可以在DAL中定義dbfactory和UOW綁定,然後使用wiki提供的動態模塊加載指導加載所有ninject模塊。

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

+0

太棒了!現在在我的UI中,我只引用了服務接口和dto ... ehhehe ...這就是我一直在尋找的東西!謝謝!!!!! – JDIBO 2012-03-27 21:21:06

0

由於Gary. S回答動態模塊加載kernel.Load("*.dll");是一個解決方案,但對我來說是重要的認識是,你必須以某種方式複製未引用的程序集的UI項目bin文件夾,使他們能夠通過Ninject被發現並正確部署。

也許有更好的辦法,但我在Visual Studio中使用了後期構建事件來複制dll文件。