Asp.Net WebApi使用Autofac实现依赖注入

什么是依赖注入?

在编程中,依赖注入是一种实现控制反转且用于解决依赖性问题的设计模式。一个依赖关系指的是可被利用的一种对象 。依赖注入是将所依赖的传递给将要使用的从属对象。该服务将会变成客户端状态的一部分并传递服务给客户端,而不允许客户端来建立或寻找服务。依赖注入使我们的编程代码变得松散耦合,易于管理。

依赖注入的类型:

构造函数注入:在构造函数注入中,注入器通过客户端类构造函数提供服务(依赖性)。

属性注入:在属性注入(又名Setter注入)中,注入器通过客户端类的公共属性提供依赖性。

方法注入:在这种类型的注入中,客户端类实现一个接口,该接口声明方法以提供依赖性,并且注入器使用此接口来提供对客户端类的依赖性。

依赖注入的好处:

    1.减少依赖性

      依赖注入可以消除或者减少组件间不必要的依赖性。以降低组件改变时所带来的影响组件

    2.增强可重用性

      减少组件依赖性可以增强组件的可重用性。如果在不同的上下文中需要某个接口的不同实现,或者只是同一实现的不同配置,则可以将该组件配置为使用该实现。无需更改代码。

    3.增加代码的可测试性

        依赖注入也增加了组件的可测试性。当依赖项可以注入组件时,意味着可以注入这些依赖项的模拟实现。模拟对象用于测试作为实际实现的替代,并且可以配置模拟对象的行为

    4.增强代码的可读性

依赖注入可将依赖项移动到组件的接口。使得更容易看到组件中哪些具有依赖关系,从而使代码更具可读性。

    5.减少依赖性承载

依赖性承载会在代码中产生大量“噪音”,使其难以阅读和维护,并且使得组件更难测试。而依赖注入可以减少依赖性承载和静态单例的使用,可以将组件完美的连接在一起

使用Autoface:

Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上非常高。

 

一、环境

.NET Framework 4.7.2  WebApi项目

在NuGet引用 Autofac

创建AutofacBuilder类

using Autofac;
using User.Interface;
using User.Repository;

namespace User.Common.Autofac
{
    public class AutofacBuilder
    {
        public static void SetupResolveRules(ContainerBuilder builder)
        {
            builder.RegisterType<LoginRepository>().As<ILoginRepository>();
        }
    }
}

在Global.asax文件中添加

using Autofac;
using Autofac.Integration.Mvc;
using Autofac.Integration.WebApi;
using User.Common.Autofac;
using System.Reflection;
using System.Web.Http;
using System.Web.Mvc;

namespace User
{
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            GlobalConfiguration.Configure(WebApiConfig.Register);
            AreaRegistration.RegisterAllAreas();
           
            //Autofac
            var builder = new ContainerBuilder();

            AutofacBuilder.SetupResolveRules(builder);
            builder.RegisterControllers(Assembly.GetExecutingAssembly());

            builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
            builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).AsImplementedInterfaces().AsSelf();

            var container = builder.Build();

            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
            configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
        }
    }
}

在Api类中调用

 public class LoginsController : ApiController
    {
        private readonly ILoginRepository _loginRepository;
        public LoginsController(ILoginRepository loginRepository)
        {
            _loginRepository = loginRepository;
        }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值