2012-02-17 112 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然後爲我執行所有依賴管理。