2011-01-11 276 views
1

我有一個正在運行並且工作正常的Unity應用程序,但我們正在通過處理所有編譯警告來清理我們的代碼。如何替換Unity解決方案中過時的Microsoft.Practices.Unity.Configuration.ContainerElement.Configure方法?

我得到的,因爲過時的Microsoft.Practices.Unity.Configuration.ContainerElement.Configure方法的下面的代碼段的警告:

var map = new ExeConfigurationFileMap { ExeConfigFilename = GetConfigFolderForFile("unity.config") }; 
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); 
var section = (UnityConfigurationSection)config.GetSection(SectionName); 

if (section != null) 
{ 

    var container = new UnityContainer(); 

    foreach (ContainerElement containerElement in section.Containers) 
    { 
     containerElement.Configure(container); 
    } 

    Container = container; // Set the main container 
} 

我想與UnityConfigurationSection.Configure來代替它方法,但不能看出它們是等價的,因爲處於對象層次結構的不同級別。

我已經試過:

var map = new ExeConfigurationFileMap { ExeConfigFilename = GetConfigFolderForFile("unity.config") }; 
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); 
var section = (UnityConfigurationSection)config.GetSection(SectionName); 

if (section != null) 
{ 
    IUnityContainer container = new UnityContainer(); 

    container = section.Configure(container); 

    Container = container; // Set the main container 
} 

但落下來與空引用。

我應該如何更新代碼以消除使用過時的方法?

回答

1

我設法讓這個工作。祕訣是使用配置方法,需要一個容器名稱來配置每個容器元素的過載:

foreach (ContainerElement containerElement in section.Containers) 
{ 
    container = section.Configure(container, containerElement.Name); 
} 

到目前爲止,這看起來好像在做一樣的過時Container.Configure方法做的 - 一切按預期工作。

1

如果在配置的部分沒有一個名字,它把它作爲默認的,你不需要指定名稱:

<containers> 
    <container> 
    <types> 
     <type type="IObject" mapTo="Object" /> 
    </types> 
    </container> 
</containers>