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 が自動的に注入されると期待していたように注入されないため、何が欠けていますか?