Unity 容器 Vb.net LoadConfiguration 异常

Unity Container Vb.net LoadConfiguration Exception

我目前正在使用 Vb.net 结合 Unity 容器模型。但我无法让它工作。 我的代码在工厂中总是失败。

unity.config:

<unity>
 <containers>
   <container>
    <types>
      <type type="TestApplication.Interfaces.IBuilder, TestApplication.Interfaces" mapTo="TestApplication.Classes.Builder, TestApplication.Classes">
      <lifetime type="singleton" />  
      </type>
    </types>
   </container>
  </containers>
</unity>

我正在使用我的 App.config 文件中引用的自定义配置源。

app.config 看起来像这样:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
  </configSections> 

<unity configSource="unity.config" />
</configuration>

我的Factory.vb看起来像这样:

Imports Microsoft.Practices.Unity
Imports Microsoft.Practices.Unity.Configuration
Imports System.Configuration

Public NotInheritable Class Factory
Private Shared registeredTypes As New Dictionary(Of Type, Object)

Public Shared Function GetInstance(Of T)(Optional asSingleton As Boolean = False) As T
    Using container As UnityContainer = Factory.GetConfiguredUnityContainer()
        Dim instance = container.Resolve(Of T)()
        If (asSingleton = True And Not Factory.registeredTypes.ContainsKey(GetType(T))) Then
            Factory.Register(Of T)(instance)
        End If

        Return instance
    End Using

End Function

Private Shared Function GetConfiguredUnityContainer() As UnityContainer
    Dim container As New UnityContainer
    container.LoadConfiguration()

    For Each item In registeredTypes
        container.RegisterInstance(item.Key, item.Value)
    Next

    Return container
End Function

Private Shared Sub Register(Of T)(instance As T)
    registeredTypes(GetType(T)) = instance
End Sub
End Class

Factory 在以下行失败:

container.LoadConfiguration()GetConfiguredUnityContainer 方法中。

A first chance exception of type System.Configuration.ConfigurationsErrorsException occured in System.Configuration.dll

我确实有对映射程序集的引用。 TestApplication.Classes 也到 TestApplication.Interfaces 接口命名为IBuilder.vb,class命名为Builder.vb

项目中的引用:

  • Microsoft.Practices.Unity
  • Microsoft.Practices.Unity.配置
  • 演示核心​​
  • PresentationFramework
  • System.Configuration
  • 有机会请给我建议,我会很高兴。

    问候。

    所以,在我周末检查了一些东西之后,我得出的结论是 vb.net 不支持外部统一 configSource。

    您可以使用 xml 解析器解析配置文件并读取每个值。但是我太懒了。

    我编辑了我的: app.Config 那样:

    已将容器从 unity.config 插入到我的 app.config

    代码:

    <configuration>
      <configSections>
        <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
      </configSections>
    
      <unity>
        <container>
           <register type="TestApplication.Interfaces.IBuilder, TestApplication.Interfaces" mapTo="TestApplication.Classes.Builder, TestApplication.Classes" />
        </container>
      </unity>
    


    我在 App.config 中注册了 type/s,之后我可以用我的工厂读取容器,并且可以使用 unity 容器。