開頭先吐槽一下博客園超級不好用,添加圖片后就寫不動字了,難道是bug
好進入正題,先來說下依賴注入,簡單來說就是定義好接口,上層代碼調用接口,具體實現通過配置文件方式去指定具體實現類。
首先我們需要通過nuget來安裝unity
安裝好后就可以寫一個方法類去實現依賴注入
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); } }
具體調用方法
public static IDatabase Base(string connString) { return UnityIocHelper.DBInstance.GetService<IDatabase>(“MySql”, new ParameterOverride( "connString", connString)); }
配置信息
<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
)這個類去實現。