2

インターフェイスを別のアセンブリの具象クラスにバインドするにはどうすればよいですか?

私のソリューションには次のプロジェクトがあります。

Foo.Data
Foo.Domain

構造マップで、2つのアセンブリ名をStructureMap.configファイルに追加してから、PluginFamily属性とPluggable属性を使用して、インターフェイスを具象クラスにマップします。

Ninjectで同じことをどのように達成できますか?

4

1 に答える 1

6

ここでいくつかの仮定をします。

  1. Foo.DomainプロジェクトにIBarという名前のインターフェイスがあり、Foo.DataプロジェクトにBarClassという名前の具象クラスがあります。
  2. BarClassはIBarを実装しているため、実際にはFoo.DataプロジェクトでFoo.Domainプロジェクトを参照しています。

Ninjectを使用する最も簡単な方法は、NinjectのStandardModuleから派生する新しいクラスをFoo.Dataに作成することです。

internal class BarModule : StandardModule {
  public override void Load() {
    Bind<IBar>()
      .To<BarClass>();
  }
}

次に、このクラスは、BarClassの具象クラスへのIBarの要求のバインディングを確立します。これはXMLに相当します。

次のステップは、Ninjectカーネル(別名「コンテナー」)を作成し、このモジュール(つまりこの構成)を提供することです。これをどこで行うかは、作成しているアプリケーションの種類によって大きく異なります。非常に一般的な用語では、通常、コードの論理エントリポイントまたは「スタートアップ」セクションでカーネルを構成します。それがコンソールまたはWindowsデスクトップアプリケーションである場合、これはmain()関数が最初に行うことの1つである可能性があります。

コードは次のようになります。

var modules = new IModule[] {
                              new BarModule()
                            };

var kernel = new StandardKernel(modules);

この時点で、次のようなことを行うと、次のようになります。

var barObj = kernel.Get<IBar>()

変数barObjは、BarClassのインスタンスを参照します。

とにかく、アプリケーションのすべてのニュアンスを完全に理解することはできませんでした。たとえば、アセンブリが動的にロードされるなどです。これがとにかく役立つことを願っています。

于 2009-08-11T03:18:03.013 に答える