• 这样入门asp.net core,如何


    本文章主要说明asp.net core的创建和简单使用。

    一、使用到的命令

    • dotnet new :创建项目(解决方案,类库,单元测试等),如:dotnet new web
    • dotnet add package 添加一个nuget的引用
    • dotnet test:运行测试
    • dotnet build:编译项目
    • dotnet sln add:将项目添加到解决方案
    • dotnet add reference:对此项目添加项目引用

    二、建立空项目

    • 在测试目录下运行 dotnet new web -n baseWeb,创建web项目,结果如下图所示:
    • image
    • 运行 dotnet run,即可运行此项目,此命令内部会执行dotnet build命令编译项目,然后运行,结果如下:
    • image
      说明:此命令是在sln(解决方案)文件所在目录运行的,所以增加了-p参数,用于指定启动指定的项目。

    三、引入mvc

    • 由于我们创建是一个空web项目,是没有mvc相关依赖包的,所以首先需要运行dotnet add package Microsoft.AspNet.Mvc 进行依赖包的安装
    • 然后在StartUp类的ConfigureServices方法中添加如下代码:
    public void ConfigureServices(IServiceCollection service){
        service.AddMvc();
        service.AddRouting();
    }

    上述添加此添加了Mvc,也添加了路由

    • 配置路由,还是在StartUp类中,其方法为Configure添加如下代码:
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        
        //添加的代码
        app.UseMvc(routers=>{
            routers.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
        });
    
        app.Run(async (context) =>
        {
            await context.Response.WriteAsync("Hello World!");
        });
    }
    • 对controller和view的创建
      在创建controller时,没有找到完全好的 命令创建方法,所以使用的是手动创建文件,然后继承Controller类实现;而view是可以通过dotnet new page实现的,但也可以使用手动创建。文件结果如下:
      image
    • 执行dotnet run运行,然后网页访问对就的地址即可
      image

    四、更换依赖注入为autofac

    aspnet core是自带了依赖注入功能的,就是StartUp类中ConfigureServices方法的IServiceCollection类型的形参。如果你想替换为autofac。请参考如下步骤

    • 安装autofac,以及acutofac的扩展类
      • Autofac
      • Autofac.Extensions.DependencyInjection
    • 更改StartUp类中的configureSeervices方法
    public IServiceProvider ConfigureServices(IServiceCollection service){
        service.AddMvc();
        service.AddRouting();
        var containerBuilder = new ContainerBuilder();
        containerBuilder.Populate(service);
        containerBuilder.RegisterType<Services.ProductService>().As<Services.IProductService>();
        var container = containerBuilder.Build(); 
        return new AutofacServiceProvider(container);
    }
    • 其中,我们更改了ConfigureServices方法的返回值,由void换成IServiceProvider;此返回为AutofacServiceProvider类的一个实例;在上述过程中,使用了continerBuilder.Populate方法将service(IServiceCollection的实例对象)注入到autofac中。
    • 其中为了测试DI能力,我们创建一个IProductService的注入,并在Controller中使用,相关代码如下:
      • IProductService
    namespace baseWeb.Services
    {
        public interface IProductService
        {
            int Get(int id);
        }  
    }
    • ProductService
    using System.Collections.Generic;
    
    namespace baseWeb.Services
    {
        public class ProductService:IProductService
        {
            List<int> ls = new List<int>();
            
            public ProductService(){
                for(var i=0; i<10; i++){
                    ls.Add(i+10);
                }
            }
            public int Get(int id){
                return ls[id];
            }
        }
    }
    • HomeController
    using System;
    using System.Collections.Generic;
    using Microsoft.AspNetCore.Mvc;
    
    namespace baseWeb.Controllers
    {
        public class HomeController:Controller
        {
            private Services.IProductService productService;
    
            public HomeController(Services.IProductService productService){
                this.productService = productService;
            }
    
            public IActionResult Index(int id){
                ViewData["value"] = this.productService.Get(id);
                return View();
            }
        }
    }
    • 运行结果如下:
      image

    五、加入单元测试

    在实际开发中,经常需要用到单元测试。.net core的单元测试也是如此的 so easy, fallow me。

    • 运行dotnet new xunit -n baseWebTest,即可创建一个以xunit为测试框架的单元测试项目
    • 运行dotnet add package Moq,安装Moq模拟框架(此命令需要进入到baseWebTest项目文件夹后运行)
    • 运行dotnet add reference ../baseWeb/baseWeb.csproj,将baseWeb项目引入到此项目中。
    • 编写单元测试代码如下:
    using System;
    using Xunit;
    using Moq;
    using baseWeb.Controllers;
    using baseWeb.Services;
    using Microsoft.AspNetCore.Mvc;
    
    namespace basewebtest
    {
        public class DemoTest
        {
            [Fact]
            public void Test1()
            {
                var productServiceMock = new Mock<IProductService>();
                productServiceMock.Setup(service=>service.Get(1)).Returns((int id)=>{
                    return id+10;
                });
                var _controller = new HomeController(productServiceMock.Object);
    
                var result = _controller.Index(1);
                var objectResult = Assert.IsType<ViewResult>(result);
                var destResult = Assert.IsAssignableFrom<int>(objectResult.ViewData["value"]);
                Assert.Equal(11, destResult);
            }
        }
    }
    • 运行dotnet test -p ./baseWebtest/baseWebtest.csproj即可,看到如下结果:
    • image

    六、其他

    • 如果你是使用vscode编写,那么测试项目是可以在编译器中进行运行和调试的
      image
    • 下载测试源码
  • 相关阅读:
    广域网详解
    无线AP和无线路由器区别
    TRUNK的作用功能.什么是TRUNK
    name after, name for, name as
    让你的情商爆棚吧!
    综合布线系统之7个子系统构成
    网桥和交换机的工作原理及区别
    边界网关协议BGP
    OSPF协议详解
    路由信息协议(RIP)的防环机制
  • 原文地址:https://www.cnblogs.com/cqhaibin/p/8596607.html
Copyright © 2020-2023  润新知