Ninject.MVC3拡張を使用してMVCアプリケーションでDIを設定するASP.NET MVC 3アプリケーションがあります。つまり、私のバインディングが定義されているフォルダにNinjectMVC3.cs
というファイルがあります。これは私のアプリケーションのコントローラにDIがうまくいきます。ASP.NET MVC 3アプリケーションでクラスライブラリのNinjectを参照する
私のソリューションには、ASP.NET MVC Webアプリケーションに加えて、クラスライブラリプロジェクトも含まれています。MyProject.Core
というドメインモデル、サービスなどがあります。そこでは私がサービスを利用するUserServices
と呼ばれるクラスはそうのように、EmailServices
呼ばれています:
public class UserServices : IUserServices
{
private readonly IEmailServices _emailServices = new EmailServices();
public void CreateUser(...)
{
// Create user...
_emailServices.SendWelcomeEmail(newUser);
}
}
あなたが見ることができるように、UserServices
クラスはEmailServices
にハードコーディングされた依存関係を持っていますが、私はにそのための希望しますDIを使用するように構成することもできます。つまり、私のASP.NET MVCアプリケーション(または単体テストプロジェクトまたはどこでも)では、「TestEmailServices
をバインドするためにバインドIEmailServices
」と言うことができるようにし、UserServices
クラスにはの代わりにEmailServices
を使用します。
これを行うにはどうすればよいですか?私のような何かを行うことができるようにしたい:
public class UserServices : IUserServices
{
private readonly IEmailServices _emailServices = kernel.Get<EmailServices>();
...
}
しかし、私はkernel
、この場合には、から来ることを行っている場所がわからないんだけど。私は何を意味しているか、私はここで間違った木を吠えていますか?
おかげ
はい、これが答えです。 Ninjectカーネルをサービスロケータとして使用しないでください。ライブラリの実装をNinjectに結合しないでください。メインアプリケーションのオブジェクトツリー全体を構築させるだけです。 – Aaronaught
ああ、私はちょうどそれを試みたはずです! <額を叩く/ /> :-)ありがとう –