3

半ダースのアセンブリを参照するMVCアプリケーションがあります。各アセンブリには、Webサイトに依存するコンポーネントがあります。また、場合によっては、これらのアセンブリは相互に依存関係にあります。これがいくつかのプロトタイプです

Assembly1
---------
interface ILogger{...}

Assembly2
--------
class MyLogger : ILogger {...}

Assembly3
--------
interface IRepository {.....}

Assembly4
---------
interface MyResository : IRepository
{
 [Inject]
  public ILogger Logger{get;set;}
  ... other methods...
}

MVCApp
------

public HomeController : Controller
{
  [Inject]
   public ILogger Logger{get;set;}
  [Inject]
   public IRepository Repository{get;set;}
}

Di解決用のすべてのNinject関連コードを別のアセンブリに配置し、そのアセンブリは他のすべてのプロジェクトを参照しています。

これが何が起こるかです。HomeControllerがインスタンス化されると、LoggerプロパティとRepositoryプロパティの有効なインスタンスがあります。ロガーには依存関係がなく、完璧です。しかし、リポジトリのインスタンスの内部を見ると、Loggerインスタンスがインスタンス化されていません。

このような状況でNinjectを使用してDIをどのように設定しますか?

ありがとう

4

1 に答える 1

1

IRepositoryのプロバイダーを実装することで、この問題を解決しました。CreateInstanceで、カーネルを使用してLoggerプロパティを解決することでインスタンス化しました。

CreateInstance(context)
{
  var repo = new MyRepository();
  repo.Logger = context.Kernel.Get<ILogger>();
}

チャームのように機能します!

于 2012-06-02T18:18:16.077 に答える