unity IOC 的使用

在Asp.NET MVC中使用Unity:

第一步:

NuGet

安装 unity、unity

第二步:

在Global.asax.cs的Application_Start方法中添加对UnityConfig.RegisterComponents()的调用

然后,Web API框架将使用Unity.WebAPI依赖解析程序来解析组件。


 第三步:写一个静态类,完成注册解析:

  public class UnityIocHelper : IServiceProvider
    {
        private readonly IUnityContainer _container;
        private static readonly UnityIocHelper instance = new UnityIocHelper("testContainer");
        private UnityIocHelper(string containerName)
        { 
            ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
            fileMap.ExeConfigFilename = HttpContext.Current.Server.MapPath("~/CfgFiles/Unity.Config");//找配置文件的路径
            Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
            UnityConfigurationSection section = (UnityConfigurationSection)configuration.GetSection(UnityConfigurationSection.SectionName);
           _container = new UnityContainer();
            section.Configure(_container, containerName); 
        }

        public static UnityIocHelper Instance
        {
            get { return instance; }
        }
        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);
        }
    }

第四步,写配置文件

<configuration>
  <configSections> 
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration"/>
  </configSections>
  <unity> 
    <containers> 
      <container name="testContainer">
        <register type="UnityIOCTest.IUserInfoService,UnityIOCTest" mapTo="UnityIOCTest.UserInfoService,UnityIOCTest"/> 
      </container> 
        </containers>
  </unity>
</configuration>

第五步,使用

IUserInfoService service =UnityIocHelper.Instance.GetService<IUserInfoService>();
service.MethodInvoke();

 至此简单的集成及使用完成了。

原文地址:https://www.cnblogs.com/ruiying/p/12670393.html