開頭先吐槽一下博客園超級很差用,添加圖片後就寫不動字了,難道是bug數據庫
好進入正題,先來講下依賴注入,簡單來講就是定義好接口,上層代碼調用接口,具體實現經過配置文件方式去指定具體實現類。app
首先咱們須要經過nuget來安裝unityide
安裝好後就能夠寫一個方法類去實現依賴注入spa
public class UnityIocHelper : IServiceProvider { private readonly IUnityContainer _container; private static readonly UnityIocHelper dbinstance = new UnityIocHelper("DBcontainer"); private UnityIocHelper(string containerName) { UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity"); _container = new UnityContainer(); section.Configure(_container, containerName); } public static UnityIocHelper DBInstance { get { return dbinstance; } } public object GetService(Type serviceType) { return _container.Resolve(serviceType); } public T GetService<T>() { return _container.Resolve<T>(); } public T GetService<T>(params ParameterOverride[] obj) { return _container.Resolve<T>(obj); } public T GetService<T>(string name, params ParameterOverride[] obj) { return _container.Resolve<T>(name, obj); } }
具體調用方法code
public static IDatabase Base(string connString) { return UnityIocHelper.DBInstance.GetService<IDatabase>(「MySql」, new ParameterOverride( "connString", connString)); }
配置信息blog
<unity> <typeAliases> <typeAlias alias="IDatabase" type="LRMC.Data.IDatabase,LRMC.Data" /> <typeAlias alias="SqlServer" type="LRMC.Data.SqlDapper.Database,LRMC.Data.SqlDapper" /> <typeAlias alias="MySql" type="LRMC.Data.MySqlDapper.Database,LRMC.Data.MySqlDapper" /> </typeAliases> <containers> <container name="DBcontainer"> <!-- 默認數據庫軟件類型:SqlServer,MySql,Oracle,Access,SQLite--> <type type="IDatabase" mapTo="SqlServer" name="SqlServer"></type > <type type="IDatabase" mapTo="MySql" name="MySql"></type > </container> </containers> </unity>
typeAlias 指定一個類的別名,
<type type="IDatabase" mapTo="MySql" name="MySql"></type >就是
IDatabase這個接口經過
MySql(
LRMC.Data.MySqlDapper.Database
)這個類去實現。