我在解析在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中注册单线的合适方式?
答案 0 :(得分:0)
我用来在Unity中注册单身的两种方式是:
_container.RegisterInstance<CommandReaderWriter>(new CommandReaderWriter);
和
_container.RegisterType<CommandReaderWriter,CommandReaderWriter>(new ContainerControlledLifetimeManager());
这两种方法都将Unity LifeTimeManager设置为ContainerControlledLifeTimeManager,它是Unity-speak for singleton。
如果要精确控制对象的构造方式,请使用RegisterInstance。第二个选项是我首选的选项,因为Unity然后为我做了所有的依赖管理。