2012-02-17 166 views
0

我在解析在UnityContainer中注册的类型时遇到问题。在我的引导程序中,我忽略了ConfigureContainer方法。现在,这种方法看起来像这样UnityContainer无法解析类型

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>(); 

可惜的是这将返回空值。我也试过

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

但它并没有把戏。但有趣的是,

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

返回true。

那么在UnityContainer中注册singletone的方法是什么?

+0

我不知道UnityBootstrapper,但我敢打赌RegisterTypeIfMissing期望第一个参数是一个接口,而不是一个类。你能到达IUnityContainer并只使用普通的Unity方法进行注册吗? – ErnieL 2012-02-20 19:39:40

回答

0

两个方法,我用它来注册一个团结单是:

_container.RegisterInstance<CommandReaderWriter>(new CommandReaderWriter); 

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

这两种方法设置统一LifeTimeManager是一个ContainerControlledLifeTimeManager,这是团结,讲一个单身。

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