我有一个带有 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 没有像我预期的那样自动注入,我错过了什么?