用最简单方式实现。代码实现后使用配置文件实现注入,后面根据项目封装,自行扩展。
一,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);