当前位置: 代码迷 >> 综合 >> c# Unity注入WebApi
  详细解决方案

c# Unity注入WebApi

热度:72   发布时间:2023-10-14 21:50:04.0

用最简单方式实现。代码实现后使用配置文件实现注入,后面根据项目封装,自行扩展。

一,vs2007建立项目,选中MVC,WEBAPI

二,安装Unity.WebApi,Unity.Configuration(为配置文件使用)

三,添加接口和实现,再添加代码到UnityConfig.cs
 

    public interface ISysPersonBLL{List<string> GetList();}public class SysPersonBLL : ISysPersonBLL{public List<string> GetList(){return new List<string> { "edc3","856j" };}}
        public static void RegisterComponents(){var container = new UnityContainer();container.RegisterType<ISysPersonBLL, SysPersonBLL>();GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);}

四,Global.asax添加一行:UnityConfig.RegisterComponents();

五,视图里增加一个请求:

<script src="~/Scripts/jquery-3.3.1.js"></script>
<script>
    $(function () {
        $.get("/Api/Values/5", function (data) {
            alert(data);
        });
    });
</script>

六,控制器里修改下:

        [Dependency]public ISysPersonBLL m_BLL { get; set; }public string Get(int id){var list = m_BLL.GetList();return list[0];}}

使用代码注入完成。

七,新增配置文件,Unity.Config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections><section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration"/>
</configSections>  <unity><alias alias="" type="" /><namespace name="Apps.WebApi.Tests.App_Start" /><assembly name="Apps.WebApi.Tests" /><container><register type="ISysPersonBLL" mapTo="SysPersonBLL" /></container></unity>
</configuration>

八,修改,UnityConfig

using Apps.WebApi.Tests.App_Start;
using Microsoft.Practices.Unity.Configuration;
using System;
using System.Configuration;
using System.Web;
using System.Web.Http;
using Unity;
using Unity.WebApi;
using Microsoft.Practices.Unity;namespace Apps.WebApi.Tests
{public static class UnityConfig{public static void RegisterComponents(){var container = BuildUnityContainer();GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);}private static IUnityContainer BuildUnityContainer(){var container = new UnityContainer();var fileMap = new ExeConfigurationFileMap { ExeConfigFilename= HttpContext.Current.Server.MapPath("~/Unity.Config") };Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap,ConfigurationUserLevel.None);var unitySection = (UnityConfigurationSection)configuration.GetSection("unity");container.LoadConfiguration(unitySection);return container;}}
}

这样就可以使用配置文件完成注入。

补充说明:如果有WEBAPI项目,控制器如果注入为NULL,将UnityConfig的调用,放入WebApiConfig的Register里。

                 Application_Start里不用调用。

            var container = UnityConfig.BuildUnityContainer();
            config.DependencyResolver = new UnityDependencyResolver(container);