UnityContainer无法解析类型

时间:2012-02-17 19:58:41

标签: silverlight silverlight-4.0 unity-container bootstrapper

我在解析在UnityContainer中注册的类型时遇到问题。在我的bootstraper中,我覆盖了ConfigureContainer方法。现在这个方法看起来像这个

 protected override void ConfigureContainer()
    {

        base.ConfigureContainer();
        RegisterTypeIfMissing(typeof(IView<ShellViewModel>), typeof(Shell), false);
        RegisterTypeIfMissing(typeof(CommandReaderWriter), typeof(CommandReaderWriter), true);
    }

然后在函数CreateShell(也在bootstraper中)我想得到CommandReaderWriter类型的实例,所以我做了这个

var raeder = Container.TryResolve<CommandReaderWriter>();

不幸的是,这会返回null值。我也试过

var anotherReader = Container.TryResolve(typeof (CommandReaderWriter));

但它并没有成功。然而,有趣的是

 var isRegistered = Container.IsTypeRegistered(typeof (CommandReaderWriter));

返回true。

那么什么是在UnityContainer中注册单线的合适方式?

1 个答案:

答案 0 :(得分:0)

我用来在Unity中注册单身的两种方式是:

_container.RegisterInstance<CommandReaderWriter>(new CommandReaderWriter);

_container.RegisterType<CommandReaderWriter,CommandReaderWriter>(new ContainerControlledLifetimeManager());

这两种方法都将Unity LifeTimeManager设置为ContainerControlledLifeTimeManager,它是Unity-speak for singleton。

如果要精确控制对象的构造方式,请使用RegisterInstance。第二个选项是我首选的选项,因为Unity然后为我做了所有的依赖管理。