我目前正在使用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.Classes
也TestApplication.Interfaces
界面名为IBuilder.vb
,类名为Builder.vb
项目中的参考资料:
请建议我任何机会,我会很高兴。
电贺。
答案 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 中注册了类型,之后我可以使用我的工厂读取容器,并且可以使用统一容器。