2017-10-20 73 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>