• web API .net


    今天我们来看一下 .net web api 和 .net core web api依赖注入机制的差异。

    首先我们分别在.net web api 和 .net core web api新建文件夹Service并增加IValueService 接口和它的实现类ValueService.

    然后我们在ValueController 里面分别添加Service 字段,并加上新的构造方法:

    .net web api controller的代码如下:

    using FreWebApi.Service;
    using System.Collections.Generic;
    using System.Web.Http;
    
    namespace FreWebApi.Controllers
    {
        public class ValuesController : ApiController
        {
            private IValueService valueService;
            public ValuesController(IValueService valueService)
            {
                this.valueService = valueService;
            }
    
            // GET api/values
            public IEnumerable<string> Get()
            {
                return valueService.GetValues();
            }
        }
    }
    View Code

    .net core web api controller的代码如下:

    using System.Collections.Generic;
    using CoreWebApi.services;
    using Microsoft.AspNetCore.Mvc;
    
    namespace CoreWebApi.Controllers
    {
        [Route("api/[controller]")]
        [ApiController]
        public class ValuesController : ControllerBase
        {
            private IValueService valueService;
            public ValuesController(IValueService valueService)
            {
                this.valueService = valueService;
            }
            // GET api/values
            [HttpGet]
            public ActionResult<IEnumerable<string>> Get()
            {
                return valueService.GetValues();
            }
        }
    }
    View Code

    看到这里我们并没有看到有什么不同,下面我们将为controller里面的service 添加依赖注入。

    在.net core中我们在Startup 类的ConfigureServices service方法里面添加依赖注入的配置:

    public void ConfigureServices(IServiceCollection services)
            {
                services.AddMvc(
                    options =>
                    {
                        options.Filters.Add(typeof(HandleExceptionAttribute), 1); // an instance
                    }
                    ).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
                services.AddTransient(typeof(IValueService), typeof(ValueService));
                //services.AddTransient<IValueService>();
                //services.AddTransient(typeof(ValueService));
                //services.AddTransient<IValueService, ValueService>();
                //services.AddTransient(typeof(IValueService), service => new ValueService());
            }
    View Code

    对于 .net 我们使用autoFac 做依赖注入,首先我们打开项目的Nuget管理,添加autoFac的包:

     然后我们在App_Start文件夹下添加类AutoFacConfig:

    代码如下:

    using System;
    using System.Reflection;
    using System.Web.Http;
    using Autofac;
    using Autofac.Integration.WebApi;
    using FreWebApi.Service;
    
    namespace FreWebApi
    {
        public class AutoFacConfig
        {
            public static void Run()
            {
                SetAutoFacConfig();
            }
    
            private static void SetAutoFacConfig()
            {
                ContainerBuilder builder = new ContainerBuilder();
                HttpConfiguration config = GlobalConfiguration.Configuration;
                // Register API controllers using assembly scanning.
                builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
                builder.RegisterType<ValueService>().As<IValueService>()
                    .SingleInstance();
                var container = builder.Build();
                // Set the WebApi dependency resolver.
                config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
            }
        }
    }
    View Code

    这个时候我们的,net web的Api的配置也就完成了。

    本文旨在比较.net web api 和 .net core web api 在依赖注入配置和写法上的差异,所以没有涉及到依赖注入对象生命周期的研究,有兴趣的同学可以查看其他原因的帖子加以了解。

  • 相关阅读:
    bzoj 2213: [Poi2011]Difference
    51nod 1079 中国剩余定理
    51nod 1074 约瑟夫环 V2
    SpringBoot:第二篇 集成mybatis
    SpringBoot:第二篇 集成日志lombok
    SpringBoot:第一篇 新建spring boot 应用
    JVM常用内存参数配置
    深入研究Java GC
    应用性能监控分析
    Java -- 深入浅出GC自动回收机制
  • 原文地址:https://www.cnblogs.com/ZhangDamon/p/11516754.html
Copyright © 2020-2023  润新知