Unity Container Vb.net LoadConfiguration异常

时间:2016-03-24 12:30:57

标签: vb.net unity-container factory

我目前正在使用Vb.net与Unity Container模型相关联。但我无法让它发挥作用。 我的代码总是在工厂中失败。

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

工厂失败了:

container.LoadConfiguration()方法中的

GetConfiguredUnityContainer

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

我确实引用了映射的程序集。 TestApplication.ClassesTestApplication.Interfaces 界面名为IBuilder.vb,类名为Builder.vb

项目中的参考资料:

  • Microsoft.Practices.Unity
  • Microsoft.Practices.Unity.Configuration
  • PresentationCore
  • PresentationFramework
  • System.Configuration
  • 请建议我任何机会,我会很高兴。

    电贺。

    1 个答案:

    答案 0 :(得分:0)

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

    您可以使用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 中注册了类型,之后我可以使用我的工厂读取容器,并且可以使用统一容器。