欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

这样入门asp.net core,如何

程序员文章站 2022-04-06 13:20:38
本文章主要说明asp.net core的创建和简单使用。 一、使用到的命令 dotnet new :创建项目(解决方案,类库,单元测试等),如:dotnet new web dotnet add package 添加一个nuget的引用 dotnet test:运行测试 dotnet build:编 ......

本文章主要说明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项目,结果如下图所示:
  • 这样入门asp.net core,如何
  • 运行 dotnet run,即可运行此项目,此命令内部会执行dotnet build命令编译项目,然后运行,结果如下:
  • 这样入门asp.net core,如何
    说明:此命令是在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实现的,但也可以使用手动创建。文件结果如下:
    这样入门asp.net core,如何
  • 执行dotnet run运行,然后网页访问对就的地址即可
    这样入门asp.net core,如何

四、更换依赖注入为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();
        }
    }
}
  • 运行结果如下:
    这样入门asp.net core,如何

五、加入单元测试

在实际开发中,经常需要用到单元测试。.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即可,看到如下结果:
  • 这样入门asp.net core,如何

六、其他

  • 如果你是使用vscode编写,那么测试项目是可以在编译器中进行运行和调试的
    这样入门asp.net core,如何
  • 下载测试源码