C# Ioc容器Unity,簡單實用


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM