使用Autofac在ASP.NETWebAPI上实现依赖注入,属性注入

首先在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));
        }

    }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王焜棟琦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值