今天我们来看一下 .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();
}
}
}

.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();
}
}
}

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

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

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(
options =>
{
options.Filters.Add(typeof(HandleExceptionAttribute), ); // 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());
}

对于 .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);
}
}
}

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

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

web API .net - .net core 对比学习-依赖注入的更多相关文章

  1. web API .net - .net core 对比学习-使用Swagger

    根据前两篇的介绍,我们知道.net web api 和 .net core web api在配置方面的不同如下: 1. .net web api的配置是在 App_Stat文件夹里面添加对应的配置类, ...

  2. web API .net - .net core 对比学习-文件目录概述

    个人正在学习.net web Api的相关知识,因此用这一系列博客做一记录. 1. 首先我们分别创建 .net web api 项目和 .net core web api 项目. 2. 我们首先比较一 ...

  3. ASP.NET Web API 中的返回数据格式以及依赖注入

    本篇涉及ASP.NET Web API中的返回数据合适和依赖注入. 获取数据 public IEnumerable<Food> Get() { var results = reop.Get ...

  4. Net core学习系列(三)——Net Core中的依赖注入

    本文通过一个维修工与工具库的例子形象的描述一下为什么要用依赖注入.它的工作原理是什么样的, 然后根据这个类比一下ASP.NET Core 中的依赖注入, 从而深刻了解它的使用方法.注意事项以及回收机制 ...

  5. ASP.NET Core中的依赖注入(1):控制反转(IoC)

    ASP.NET Core在启动以及后续针对每个请求的处理过程中的各个环节都需要相应的组件提供相应的服务,为了方便对这些组件进行定制,ASP.NET通过定义接口的方式对它们进行了"标准化&qu ...

  6. 深入理解net core中的依赖注入、Singleton、Scoped、Transient(一)

    相关文章: 深入理解net core中的依赖注入.Singleton.Scoped.Transient(一) 深入理解net core中的依赖注入.Singleton.Scoped.Transient ...

  7. ASPNETCOREAPI 跨域处理 SQL 语句拼接 多条件分页查询 ASPNET CORE 核心 通过依赖注入(注入服务)

    ASPNETCOREAPI 跨域处理 AspNetCoreApi 跨域处理 如果咱们有处理过MV5 跨域问题这个问题也不大. (1)为什么会出现跨域问题:  浏览器安全限制了前端脚本跨站点的访问资源, ...

  8. ASP.NET Core 中的 依赖注入介绍

    ASP.NET Core 依赖注入 HomeController public class HomeController : Controller { private IStudentReposito ...

  9. ASP.NET Core中的依赖注入(5): ServiceProvider实现揭秘 【总体设计 】

    本系列前面的文章我们主要以编程的角度对ASP.NET Core的依赖注入系统进行了详细的介绍,如果读者朋友们对这些内容具有深刻的理解,我相信你们已经可以正确是使用这些与依赖注入相关的API了.如果你还 ...

随机推荐

  1. Dense Semantic Labeling with Atrous Spatial Pyramid Pooling and Decoder for High-Resolution Remote Sensing Imagery(高分辨率语义分割)

    对 Potsdam and Vaihingen 公开数据集进行处理,得到了SOTA的结果,超越DeepLab_v3+,提出的网络结构如下:结合了ASPP和FCN,UNet

  2. Pytest权威教程(官方教程翻译)

    Pytest权威教程01-安装及入门 Pytest权威教程02-Pytest 使用及调用方法 Pytest权威教程03-原有TestSuite的执行方法 Pytest权威教程04-断言的编写和报告 P ...

  3. CNN中各类卷积总结:残差、shuffle、空洞卷积、变形卷积核、可分离卷积等

    CNN从2012年的AlexNet发展至今,科学家们发明出各种各样的CNN模型,一个比一个深,一个比一个准确,一个比一个轻量.我下面会对近几年一些具有变革性的工作进行简单盘点,从这些充满革新性的工作中 ...

  4. 关于python的深拷贝和浅拷贝

    写类函数的时候出了一个错,原代码写在这里: def Update(self, wm, vm, ts, pos, vn, att): # 上一时刻位置,速度 pos_pre = pos self.pos ...

  5. mysql下sql语句令某字段值等于原值加上一个字符串

    MYSQL在一个字段值后面加字符串,如下: member 表名 card 字段名 update member SET card = '00' || card; (postgreSQL 用 || 来连贯 ...

  6. 用Visual Studio编写UDF的一点小技巧(自动补全宏函数、变量)

    下载Visual Studio,安装VS 下载番茄助手(Visual Assist X),链接:www.wholetomato.com,然后安装番茄助手 打开VS

  7. 改进欧拉公式求解常微分方程(c++)

    #include<iostream> #include<iomanip> using namespace std; int main() { double x,y,h,temp ...

  8. 【2019.11.20】SDN上机第4次作业

    安装OpenDayLight控制器 配置JAVA环境 https://www.opendaylight.org/ 在官网进行下载OpenDayLight控制器 启动OpenDayLight控制器和安装 ...

  9. 学习opencv(1)

    目录 CV_8UC3 Scalar--颜色赋值 using namespace cv找不到命名空间 waitKey() getTickCount() 引用 CV_8UC3 a) 存放单通道图像中像素: ...

  10. [E2E_L9]类化和级联化

    一.多车辆识别可能和车辆车牌分割: 这样一张图,可以识别多车辆和车牌,问题是如何区分并且配对.  0  1  7  8 是否是车牌可以通过图片的大小进行判断.而配对是前后顺序的. // ------- ...