記錄,學習用
參考來源:
1.Unity(DI)でDBに接続してみよう http://mk3008net.hatenablog.com/entry/2017/01/09/001325
2.WebアプリからOracleに接続するconnectionStrings(tnsname.ora不要) https://qiita.com/lainzero/items/32f424c98544c7a1b2fe
使用工具
Visual Studio 安裝以下套件*(NuGet)
==== Unity ====
Install-Package CommonServiceLocator -Version 1.3.0
Install-Package Unity -Version 4.0.1
Install-Package Unity.Interception -Version 4.0.1
==== Oracle DB接続 ====
Install-Package Oracle.ManagedDataAccess -Version 12.1.24160719
Step1:安裝完成後將App.config修改成
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- Unity設定 -->
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
</configSections>
<unity configSource="Unity.config"/>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
</startup>
</configuration>
Step2:建立Unity.config檔
<!-- unity -->
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension,Microsoft.Practices.Unity.Interception.Configuration" />
<!-- DBコネクション -->
<alias alias="IDbConnection" type="System.Data.IDbConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<alias alias="IDbCommand" type="System.Data.IDbCommand, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<alias alias="OracleConnection" type="Oracle.ManagedDataAccess.Client.OracleConnection, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<alias alias="OracleCommand" type="Oracle.ManagedDataAccess.Client.OracleCommand, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<container>
<extension type="Interception" />
<!-- tnsname.ora不要 -->
<instance name="constrExhibit" value="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ホスト名)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=サービス名))); User Id=ユーザー名; Password=パスワード" />
<register type="IDbConnection" mapTo="OracleConnection" name="conExhibit">
<constructor>
<param name="connectionString" dependencyName="constrExhibit" />
</constructor>
<method name="Open" />
<lifetime type="singleton" />
</register>
<register type="IDbCommand" mapTo="OracleCommand" name="cmdExhibit">
<constructor>
<param name="cmdText" value="dummy-sql" />
<param name="conn" dependencyName="conExhibit" />
</constructor>
<property name="BindByName" value="True" />
<interceptor type="InterfaceInterceptor" />
<policyInjection />
</register>
</container>
</unity>
Step3:修改Module1.vb檔
Imports Microsoft.Practices.ServiceLocation
Imports Microsoft.Practices.Unity.Configuration
Imports Microsoft.Practices.Unity
Module Module1
Sub Main()
Dim container As New UnityContainer()
container.LoadConfiguration()
Dim service As New UnityServiceLocator(container)
ServiceLocator.SetLocatorProvider(Function() service)
Using cmd = ServiceLocator.Current.GetInstance(Of IDbCommand)("cmdExhibit")
cmd.CommandText = "SELECT CURRENT_TIMESTAMP FROM DUAL"
Dim d = cmd.ExecuteScalar()
Console.WriteLine(d)
End Using
Console.WriteLine("何かキーを押してください")
Console.ReadKey()
End Sub
End Module