代码之家  ›  专栏  ›  技术社区  ›  Mihai Alexandru-Ionut

如何从配置文件加载统一设置?

  •  1
  • Mihai Alexandru-Ionut  · 技术社区  · 8 年前

    我有一个 统一 配置文件( App.config )如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration"/>
      </configSections>
      <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
        <alias alias="IProductService" type="UnityExample.Service.IProductService, UnityExample.Service" />
        <containers>
          <container name="Service">
            <register type="IProductService" mapTo="ProductService"/>
          </container>
        </containers>
      </unity>
    </configuration>
    

    现在我想 负载 上面的配置 file .

    var container = new UnityContainer().LoadConfiguration("Service");
    

    但我收到以下错误:

    [argumentNullException:值不能为空。参数名称:节] Microsoft.Practices.Unity.Configuration.UnityContainerExtensions.LoadConfiguration(IUnityContainer 容器,UnityConfigurationSection部分,字符串containerName)

    1 回复  |  直到 8 年前
        1
  •  3
  •   Rui Jarimba    8 年前

    我能让它工作。我使用您使用的相同名称空间创建了一个演示控制台应用程序,如下所示:

    安装的Nuget包:

    <?xml version=“1.0”encoding=“utf-8”?gt;
    <软件包>
    <package id=“Unity”version=“5.8.6”targetframework=“net461”/>
    <package id=“Unity.Abstractions”version=“3.3.0”targetframework=“net461”/>gt;
    <package id=“unity.configuration”version=“5.2.3”targetframework=“net461”/>gt;
    </packages>
    

    应用程序配置:

    <?xml version=“1.0”encoding=“utf-8”?gt;
    <配置>
    <配置部分>
    <section name=“Unity”type=“microsoft.practices.unity.configuration.unity配置节,unity.configuration”/>
    </configSections>
    
    <unity xmlns=“http://schemas.microsoft.com/practices/2010/unity”>
    <assembly name=“UnityExample”/>
    <namespace name=“UnityExample.Service”/>
    
    <容器>
    <container name=“服务”>
    <register type=“iproductService”mapto=“productService”/>
    </container>
    </containers>
    </Unity>
    
    <启动>
    <supportedRuntime version=“v4.0”sku=“NetFramework,version=v4.6.1”/>
    </startup>
    <运行时>
    <assemblybinding xmlns=“urn:schemas-microsoft-com:asm.v1”>
    <dependentassembly>
    <assemblyIdentity name=“Unity.configuration”publicKeyToken=“6d32f45e0ccc69f”culture=“neutral”/>gt;
    <bindingRedirect oldversion=“0.0.0.0-5.2.3.0”newversion=“5.2.3.0”/>gt;
    </DependentAssembly>
    </assemblybinding>
    </runtime>
    </configuration>
    

    代码:

    命名空间UnityExample.service
    {
    公共接口IProductService
    {
    
    }
    
    公共类ProductService:IProductService
    {
    }
    }
    

    主:

    使用system.configuration; 使用microsoft.practices.unity.configuration; 使用统一; 使用UnityExample.Service; 命名空间单元示例 { 课程计划 { 静态void main(string[]args) { var container=new unitycontainer(); UnityConfigurationSection部分=(UnityConfigurationSection)ConfigurationManager.GetSection(“Unity”); 配置(容器,“服务”); iproductService service=container.resolve<iproductService>(); } } }
    Assembly information

    安装的Nuget包:

    <?xml version="1.0" encoding="utf-8"?>
    <packages>
      <package id="Unity" version="5.8.6" targetFramework="net461" />
      <package id="Unity.Abstractions" version="3.3.0" targetFramework="net461" />
      <package id="Unity.Configuration" version="5.2.3" targetFramework="net461" />
    </packages>
    

    应用程序配置:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <configSections>
            <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration"/>
        </configSections>
    
        <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
            <assembly name="UnityExample" />
            <namespace name="UnityExample.Service" />
    
            <containers>
                <container name="Service">
                    <register type="IProductService" mapTo="ProductService"/>
                </container>
            </containers>
        </unity>
    
        <startup>
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
        </startup>
        <runtime>
            <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
                <dependentAssembly>
                    <assemblyIdentity name="Unity.Configuration" publicKeyToken="6d32ff45e0ccc69f" culture="neutral" />
                    <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
                </dependentAssembly>
            </assemblyBinding>
        </runtime>
    </configuration>
    

    代码:

    namespace UnityExample.Service
    {
        public interface IProductService
        {
    
        }
    
        public class ProductService : IProductService
        {
        }
    }
    

    主营:

    using System.Configuration;
    using Microsoft.Practices.Unity.Configuration;
    
    using Unity;
    using UnityExample.Service;
    
    namespace UnityExample
    {
        class Program
        {
            static void Main(string[] args)
            {
                var container = new UnityContainer();
                UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
                section.Configure(container, "Service");
    
                IProductService service = container.Resolve<IProductService>();
            }
        }
    }