• 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 在依赖注入配置和写法上的差异,所以没有涉及到依赖注入对象生命周期的研究,有兴趣的同学可以查看其他原因的帖子加以了解。

  • 相关阅读:
    MEF 根据配置注入Service
    .Net创建windows服务入门
    MySQL中MAX函数与Group By一起使用的注意事项(转)
    .net core 跨平台实践
    python中的迭代器和生成器
    python抓取链家房源信息(二)
    scrapy抓取小说
    python的scrapy框架
    总结
    python抓取链家房源信息
  • 原文地址:https://www.cnblogs.com/ZhangDamon/p/11516754.html
Copyright © 2020-2023  润新知