2012-03-27 3 views
2

私はMVCとNinjectで新しく..... Ninjectを使う私はGlobal.asaxのApplication_start() NinjectControllerFactoryクラスのMVC Ninject Iデータレイヤーへの参照は避けたいがサービスレイヤーに限定する

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

私は全くそれを好きではないOK

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を使用すると、私のUIからデータを渡したいです

私は例えば...リポジトリを注入し、私のサービスのインスタンスを作成...

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

0

Gary. Sは、動的モジュールのロードkernel.Load("*.dll");に答えたようなソリューションですが、私のための重要な実現は、あなたは彼らがNinjectで見つけることができるので、何とかUIプロジェクトのbinフォルダに未参照されるアセンブリをコピーする必要があることでした適切に展開されます。

おそらくもっと良い方法がありますが、私は、dllファイルをコピーするためにVisual Studioでポストビルドイベントを使用しました。

関連する問題