2017-10-20 234 views
1

如何使用新的Unity 5.0.0 Resolve()方法解析類的實例?使用unity 5.0.0解析實例

在Unity 4.0.1中,我解析了一個例子,如下面的例子SettingsContext。但是這不再有效。
我在想這是給resolve第二個參數的問題,但我不知道如何。

var _unity = UnityConfig.GetConfiguredContainer(); 
var _settings = _unity.Resolve<SettingsContext>(); 

隨着UnityConfig類被定義爲

public class UnityConfig 
{ 
    private static Lazy<IUnityContainer> container = new Lazy<IUnityContainer>(() => 
    { 
     var container = new UnityContainer(); 
     RegisterTypes(container); 
     return container; 
    }); 

    public static IUnityContainer GetConfiguredContainer() 
    { 
     return container.Value; 
    } 

    public static void RegisterTypes(IUnityContainer unity) 
    { 
     //all the unity.RegisterType calls 
    } 
} 

回答

1
  1. 作爲正常,裝入容器中。
  2. 接下來載入命名的部分 - 默認值是「unity」,但它可以是你想要在配置文件中的任何標籤。
  3. 最後,有段對象配置容器。

    var c = new UnityContainer();  
    var section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity"); 
    section.Configure(c); 
    var ss = c.Resolve<IStorageSystem>(); 
    

對於應用|的web.config,一定要引用更新類型定義(見組件)。

<configSections> 
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration"/> 
</configSections> 
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity"> 
<container> 
    <register type="FileBox.IStorageSystem, FileBox" mapTo="FileBox.StorageSystem.Local.LocalFileSystem, FileBox" > 
    <constructor> 
     <param name="root"> 
     <value value =""/> 
     </param> 
    </constructor> 
    </register> 
</container>