開頭先吐槽一下博客園超級不好用,添加圖片后就寫不動字了,難道是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
)這個類去實現。
