0

mvvmlight と ninject 3.x を使用した Silverlight 4 プロジェクトがあります。

このようにコンテナをセットアップしました

kernel = new StandardKernel(new ViewModelModule(), new ClientSessionModule());

そして、このようなモジュール

public class ViewModelModule : NinjectModule
{
    public override void Load()
    {
        ((StandardKernel)Kernel)
            .Bind(scanner => scanner.FromThisAssembly()
                            .Select(x  => x.IsSubclassOf(typeof(ViewModelBase)))
            .BindDefaultInterface());
    }
}

public class ClientSessionModule : NinjectModule
{
    public override void Load()
    {
        Kernel.Bind<IClientContext>().To<ClientContext>().InSingletonScope();
    }
}

さて、問題は後者です。アプリケーションのある時点で、この依存関係は明示的に解決され、次のように更新されます。

var context = App.Ioc.Get<IClientContext>();
context.Username = "just a sample name";

ViewModel が読み込まれると、次のように IClientContext が注入されます。

public MainViewModel(IClientContext clientContext)

問題は、インスタンスに以前に設定された名前がないことです。しかし、同じ ViewModel 内で再度明示的に解決すると、名前が設定された期待されるインスタンスが取得されます。

sigleton が自動的に注入されると期待していたように注入されないため、何が欠けていますか?

4

1 に答える 1

0

私のソリューションで重複したカーネルが見つかりました。そして、それが、2つのカーネルを実行していたため、期待どおりに解決できなかった理由を説明しています

于 2012-05-24T13:35:33.797 に答える