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 回答