1

アプリケーションのさまざまなレイヤー間でコンテナーを共有したいと思います。コンテナを初期化し、コンテナに型を登録する静的クラスの作成を開始しました。

public class GeneralDIModule : NinjectModule
{
    public override void Load()
    {
        Bind<IDataBroker>().To<DataBroker>().InSingletonScope();
    }
}

public abstract class IoC
{
    private static IKernel _container;

    public static void Initialize()
    {
        _container = new StandardKernel(new GeneralDIModule(), new ViewModelDIModule());
    }

    public static T Get<T>()
    {
        return _container.Get<T>();
    }
}

Resolveメソッドもあることに気づきました。ResolveとGetの違いは何ですか?

私の単体テストでは、コンテナに登録されているすべてのタイプが常に必要なわけではありません。空のコンテナを初期化してから、必要なタイプを登録する方法はありますか?ユニットテストでもタイプをモックするので、それらも登録する必要があります。

Injectメソッドがありますが、インスタンスのライフサイクルが管理されていないと表示されますか?

誰かが私を正しい方法で設定してくれませんか?

オブジェクトを登録、登録解除、およびコンテナをリセットするにはどうすればよいですか。

4

1 に答える 1

2

Ninjectはデフォルトで一時的なライフスタイルのコンポーネントをバインドし、Ninjectは一時的なインスタンスを追跡しません。Resolveは内部で使用されるため、自分が何をしているかを本当に理解していない限り、コードで使用しないでください。コンテナをモックしたい場合は、githubのninject.moq拡張機能を使用してください。参照している注入メソッドは、自分で作成したインスタンス用です。GetメソッドとTryGetメソッドを使用します。

于 2010-05-19T04:12:50.840 に答える