2

しばらく探していました。

私は依存性注入に不慣れではなく、MVCなどのいくつかのプロジェクトでStructureMapを使用しましたが、楽しみを逃さないように、Ninjectを試してみたいと思いました。

最新のWebアプリでNinjectを使用しようとしています。

Ninjectが提供するブログやwikiで見つけることができませんでした。正直に言うと少し焦りがちなので、見逃している可能性があります。Googleの最初の数ページは古くなっているか、NinjectでMVCを使用することについて話しているようです。

これまでのところ、次のように機能しますが、ServiceModuleをカーネルに呼び出し、Webアプリから目的のバインドを使用してプロパティを挿入することに関して、誰かが邪魔にならないオプションを指摘してくれることを期待していました。

私がこれまでに持っているのはServiceModuleです。

public class ServiceModule : NinjectModule
{
    public override void Load()
    {
        string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        Bind<IPreRegistrationService>().To<PreRegistrationService>()
            .WithConstructorArgument("connectionString",connectionString);
    }
}

次に、私のページでプライベート変数を定義しました。

private IPreRegistrationService xfemPreRegistrationService = null;

次に、ページ読み込みイベントで:

    IKernel kernel = new StandardKernel(new ServiceModule());
    xfemPreRegistrationService = kernel.Get<IPreRegistrationService>();

これは機能しますが、私が定義するのは次のフェーズに進むことです。

[Inject]
public IPreRegistrationService xfemPreRegistrationService { get; set; }

ページ上にあり、残りは魔法です。

乾杯

4

1 に答える 1

2

このstackoverflowの投稿のおかげで、拡張機能Ninject.Webについて知りました。

私が見つけた問題は、Ninject.Webの使用を開始する必要があることでしたが、証券などを処理するためにすでにPageBaseが定義されているため、使用できませんでした。

したがって、私が見ることができる唯一の方法は、プロジェクトからKernelContainerクラスを取得することでした(KernelContainerは内部として定義されているため)。

次に、グローバルasaxOnApplicationStartから呼び出します。

KernelContainer.Kernel = new StandardKernel(new ServiceModule());

// Request injections for the application itself.
KernelContainer.Inject(this);

次に、OnInitメソッドからの私のPageBaseで:

KernelContainer.Inject(this);

これにより、次のことを簡単に行うという目標を達成することができました。

[Inject]
public IPreRegistrationService xfemPreRegistrationService { get; set; }

必要に応じて

于 2010-07-30T13:02:03.860 に答える