Unity Framework使用配置

时间:2014-03-03 08:22:25

标签: c# design-patterns dependency-injection unity-container

我使用Unity Framework在C#中有这段代码

static void MakeEverythingReady(UnityContainer container)
{
        try
        {

            container.RegisterType<ICar, Maruti>("UseMaruti", 
                new InjectionConstructor(new ResolvedParameter<MarutiEngine>()));
            container.Resolve<ICar>("UseMaruti");
            container.RegisterType<IEngine, MarutiEngine>("UseMarutiEngine");
            container.Resolve<IEngine>("UseMarutiEngine");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

我尝试使用配置执行相同的操作并编写了这个....

<configuration>
<configSections>
<section name="unity"
        type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,
             Microsoft.Practices.Unity.Configuration" />
</configSections>

<startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>

<unity>
<typeAliases>
  <typeAlias alias="singleton"
     type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager,
           Microsoft.Practices.Unity" />
</typeAliases>
<containers>
  <container name="containerCar">
    <type type="UnityCar.IEngine" mapTo="UnityCar.MarutiEngine" name="UseMarutiEngine" />
    <type type="UnityCar.ICar" mapTo="UnityCar.Maruti" name="UseMaruti">
      <typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement,
                                 Microsoft.Practices.Unity.Configuration">
        <constructor>
          <param name="UseMarutiEngine" parameterType="UnityCar.IEngine">
            <dependency/>>
          </param>
        </constructor>
      </typeConfig>
    </type>
  </container>
</containers>
</unity>
</configuration>

尝试使用以下代码加载此配置文件

UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
section.Configure(container, "containerCar");

这里我们有两个程序集UnityExample是一个控制台,UnityCar是一个具有所有接口和具体实现的dll。此配置文件是UnityExample的app.config。

抛出配置异常 -

Unrecognized element 'typeConfig'

有任何线索吗?

1 个答案:

答案 0 :(得分:0)

我以前见过这个问题。不幸的是,我无法像我预期的那样设法解决它。 对我来说,解决方案是从配置中删除typeConfig元素。 所以我想,如果你修改你的app.config,它应该工作:

<type type="UnityCar.ICar" mapTo="UnityCar.Maruti" name="UseMaruti">
        <constructor>
          <param name="UseMarutiEngine" parameterType="UnityCar.IEngine">
            <dependency/>>
          </param>
        </constructor>
</type>