首先在webapi项目上安装引用的nuget组件,他们是Autofac,Autofac.WebApi2都是注册时需要用的组件,可以在Nuget中搜索出来
注意在Global.asax.cs中的注入引用,有两个很关键的命名空间
using Autofac;
using Autofac.Integration.WebApi;
参考代码:
Global.asax.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using Autofac;
using Autofac.Integration.WebApi;
using GongDianDuanWorkReport.IBll;
using GongDianDuanWorkReport.Model.View;
using GongDianDuanWorkReport.RealizeBll;
namespace GongDianDuanWorkReport
{
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
//BundleConfig.RegisterBundles(BundleTable.Bundles);
//autofac注册
//實例化容器構建器
var builder = new ContainerBuilder();
//由於是在web項目裡面引用的autofac,所以注入也在這層,加載程序集BLL和Data需要引用
//不然Assembly.Load加載不到當前bin目錄裡面的Data層的dll
//也可以不引用,需要手動將Data層的dll複製到web裡面的bin
Assembly asseambly_BLL = Assembly.Load("GongDianDuanWorkReport.RealizeBll");
Assembly asseambly_Data = Assembly.Load("GongDianDuanWorkReport.RealizeDao");
Assembly asseambly_IBLL = Assembly.Load("GongDianDuanWorkReport.IBll");
Assembly asseambly_IData = Assembly.Load("GongDianDuanWorkReport.Idao");
//注入成功
builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
builder.RegisterAssemblyTypes(asseambly_IBLL).AsImplementedInterfaces().PropertiesAutowired();
builder.RegisterAssemblyTypes(asseambly_BLL).AsImplementedInterfaces().PropertiesAutowired();
builder.RegisterAssemblyTypes(asseambly_IData).AsImplementedInterfaces().PropertiesAutowired();
builder.RegisterAssemblyTypes(asseambly_Data).AsImplementedInterfaces().PropertiesAutowired();
//强类型注入
//builder.RegisterType<ProjectBll>().As<IProjectBll>();
//注入成功
//builder.RegisterAssemblyTypes(asseambly_IBLL, asseambly_BLL).Where(x=>x.Name.EndsWith("Bll")).AsImplementedInterfaces().PropertiesAutowired();
//builder.RegisterAssemblyTypes(asseambly_IData, asseambly_Data).Where(x => x.Name.EndsWith("Dao")).AsImplementedInterfaces().PropertiesAutowired();
var container = builder.Build();
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
}
}
}
调用的控制器参考:
ProjectController.cs
using GongDianDuanWorkReport.IBll;
using GongDianDuanWorkReport.Model;
using GongDianDuanWorkReport.Model.View;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web.Http;
namespace GongDianDuanWorkReport.Controllers
{
public class ProjectController : ApiController
{
public IProjectBll projectBll { get; set; }
[HttpGet]
[Route("api/project/page")]
public async Task<IHttpActionResult> ProjectPage([FromUri]Project project, int pageIndex = 1, int pageSize = 10)
{
var page = await projectBll.PageAsync(project, pageIndex, pageSize);
return Ok(new Result(page));
}
}
}