1:什么是.Net Core
ASP.NET Core 是一个开源的、跨平台的 .NET 实现。而 .NET Framework 是基于 Windows 的 .NET 实现,Mono 是 .NET Framework 的一个开源、跨平台的实现。
ASP.NET Core分为两大块:1).NET Core Framework,2).NET Core Runtime。
2..Net Core的优势
具体优点
1)生成webui和webapi的统一场景,
2)集成新式客户端框架和开发工作流,
3)基于环境的云就绪配置系统,
4)内置依赖注入,(可以使用第三方替换)
5)轻型的高性能模块化的HTTP请求管道,
6)能够在IIS,nginx,Apache,docker上进行委托管或在自己的进程中进行托管,
7)定目标到.net core ,时可以使用并行应用版本控制,
8)简化新式的web开发工具,
9)开源代码和以社区为中心
且.net core 完全作为nuget包提供,借助nuget包可以将应用优化减少到只包含到必须的依赖项,提升了安全性,减少了维护和提高性能
asp.net core 鱼客户端框架 angular react bootstrap 可以无缝集合
3.一个asp.net core web网站包含哪些文件
根目录/文件 | 说明 |
.vscode目录 | VS Code项目配置目录,相当于.vs、.idea文件夹 |
bin目录 | 编译输出目录,相当于Java项目的target目录 |
obj目录 | 编译配置与中间目录,用于存放编译配置与编译中间结果 |
Properties目录 | 用于存放项目配置 |
wwwroot目录 | 静态文件目录 |
helloweb.csproj文件 | 项目描述文件 |
Program.cs文件 | 应用程序入口类文件 |
Startup.cs文件 | ASP.NET Core Web应用启动类文件,用于项目启动前进行相关配置 |
4.asp.net core web网站启动的过程
5: 什么是依赖注入
依赖的一个设计原则:依赖于抽象,而不是具体的实现,这个后面会具体解释的
Output类需要Rely类来帮助它实现输出的功能,这样Output类对Rely类产生了依赖,可以理解为Output依赖于Rely
Rely类
public class Rely
{
public Task Test(string testMessage)
{
Console.WriteLine(testMessage);
return Task.FromResult(0);
}
}
Output类
public class Output
{
Rely rely = new Rely();
public async Task Out()
{
await rely.Test("這是一個測試消息");
}
}
简单来说就是别人对依赖创建实例化,我自己只负责使用,别人创建好了给我使用,这么一个过程可以理解为注入
在这里Output类不去实例化Rely类,而是通过其他人传递给我,我只用就好。到底怎么理解注入呢?
修改Output类
public class Output
{
private Rely _rely;
public Output(Rely rely)
{
_rely = rely;
}
public async Task Out()
{
await _rely.Test("這是一個測試消息");
}
}
6.什么是中间件
中间件是组装到应用程序管道中以处理请求和响应的软件。
每个组件:
选择是否将请求传递给管道中的下一个组件。
可以在调用管道中的下一个组件之前和之后执行工作。
请求委托(Request delegates)用于构建请求管道,处理每个HTTP请求。
7:中间的顺序是怎么样的
ASP.NET Core请求流程由一系列请求委托组成,如下图所示
8:asp.net core 依赖注入有几种方式
//依赖注入
services.AddScoped<ICount, Count>();//范围注入
services.AddTransient<ICount, Count>();//暂存注入
services.AddSingleton<ICount, Count>();//单例模式注入
9:编写自定义中间件的过程
Models文件夹新建两个类分别是Count和ICount, DefaultModule
而Count类 继承ICount类
DefaultModule 类代码如下
public class DefaultModule : Module
{
protected override void Load(ContainerBuilder builder)
{
base.Load(builder);
}
}
然后在Startup类下 public IServiceProvider ConfigureServices(IServiceCollection services) 方法 写上代码 如下
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
//依赖注入
services.AddScoped<ICount, Count>();//范围注入
services.AddTransient<ICount, Count>();//暂存注入
services.AddSingleton<ICount, Count>();//单例模式注入
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddMvc();
var containerBuilder = new ContainerBuilder();
containerBuilder.RegisterModule<DefaultModule>();
containerBuilder.Populate(services);
var container = containerBuilder.Build();
return new AutofacServiceProvider(container);
}
之后就可以运行Index页面了