Browse Source

sync from the English doc

pull/5986/head
ZFmY 6 years ago
committed by GitHub
parent
commit
58a304bd0c
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 354
      docs/zh-Hans/Getting-Started-AspNetCore-Application.md

354
docs/zh-Hans/Getting-Started-AspNetCore-Application.md

@ -1,194 +1,160 @@
## 在AspNet Core MVC Web Application中使用ABP # 在AspNet Core MVC Web Application中使用ABP
本教程将介绍如何开始以最少的依赖关系开始使用ABP开发. 本教程将介绍如何开始以最少的依赖关系开始使用ABP开发.
通常情况下你需要下载一个 ***[启动模板](Getting-Started-AspNetCore-MVC-Template.md)*** 通常情况下你需要下载一个 **[启动模板](Getting-Started-AspNetCore-MVC-Template.md)**
### 创建一个新项目 ## 创建一个新项目
1. 使用Visual Studio创建一个空的AspNet Core Web Application: 1. 使用Visual Studio 2019 (16.4.0+)创建一个新的AspNet Core Web Application:
![](images/create-new-aspnet-core-application.png) ![](images/create-new-aspnet-core-application-v2.png)
2. 选择空模板 2. 配置新的项目:
![](images/select-empty-web-application.png) ![](images/select-empty-web-application-v2.png)
你可以选择其它模板,但是我想要从一个简洁的项目演示它. 3. 完成创建:
### 安装 Volo.Abp.AspNetCore.Mvc 包 ![](images/create-aspnet-core-application.png)
Volo.Abp.AspNetCore.Mvc是ABP集成AspNet Core MVC的包,请安装它到你项目中:
## 安装 Volo.Abp.AspNetCore.Mvc 包
````
Install-Package Volo.Abp.AspNetCore.Mvc Volo.Abp.AspNetCore.Mvc是ABP集成AspNet Core MVC的包,请安装它到你项目中:
````
````
### 创建ABP模块 Install-Package Volo.Abp.AspNetCore.Mvc
````
ABP是一个模块化框架,它需要一个**启动 (根) 模块**继承自``AbpModule``:
## 创建ABP模块
````C#
using Microsoft.AspNetCore.Builder; ABP是一个模块化框架,它需要一个**启动 (根) 模块**继承自``AbpModule``:
using Microsoft.Extensions.Hosting;
using Volo.Abp; ````C#
using Volo.Abp.AspNetCore.Mvc; using Microsoft.AspNetCore.Builder;
using Volo.Abp.Modularity; using Microsoft.Extensions.Hosting;
using Volo.Abp;
namespace BasicAspNetCoreApplication using Volo.Abp.AspNetCore.Mvc;
{ using Volo.Abp.Modularity;
[DependsOn(typeof(AbpAspNetCoreMvcModule))]
public class AppModule : AbpModule namespace BasicAspNetCoreApplication
{ {
public override void OnApplicationInitialization( [DependsOn(typeof(AbpAspNetCoreMvcModule))]
ApplicationInitializationContext context) public class AppModule : AbpModule
{ {
var app = context.GetApplicationBuilder(); public override void OnApplicationInitialization(
var env = context.GetEnvironment(); ApplicationInitializationContext context)
{
if (env.IsDevelopment()) var app = context.GetApplicationBuilder();
{ var env = context.GetEnvironment();
app.UseDeveloperExceptionPage();
} if (env.IsDevelopment())
else {
{ app.UseDeveloperExceptionPage();
app.UseExceptionHandler("/Error"); }
} else
{
app.UseStaticFiles(); app.UseExceptionHandler("/Error");
app.UseRouting(); }
app.UseConfiguredEndpoints();
} app.UseStaticFiles();
} app.UseRouting();
} app.UseConfiguredEndpoints();
```` }
}
``AppModule`` 是应用程序启动模块的好名称(建议你的启动模块也使用这个命名). }
````
ABP的包定义了这个模块类,模块可以依赖其它模块.在上面的代码中 ``AppModule`` 依赖于 ``AbpAspNetCoreMvcModule`` (模块存在于Volo.Abp.AspNetCore.Mvc包中). 安装新的ABP的包后添加``DependsOn``是很常见的做法.
``AppModule`` 是应用程序启动模块的好名称.
我们在此模块类中配置ASP.NET Core管道,而不是Startup类中.
ABP的包定义了这个模块类,模块可以依赖其它模块.在上面的代码中 ``AppModule`` 依赖于 ``AbpAspNetCoreMvcModule`` (模块存在于[Volo.Abp.AspNetCore.Mvc](https://www.nuget.org/packages/Volo.Abp.AspNetCore.Mvc)包中). 安装新的ABP的包后添加``DependsOn``是很常见的做法.
### 启动类
我们在此模块类中配置ASP.NET Core管道,而不是Startup类中.
接下来修改启动类集成ABP模块系统:
### 启动类
````C#
using System; 接下来修改启动类集成ABP模块系统:
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection; ````C#
using Microsoft.AspNetCore.Builder;
namespace BasicAspNetCoreApplication using Microsoft.Extensions.DependencyInjection;
{
public class Startup namespace BasicAspNetCoreApplication
{ {
public IServiceProvider ConfigureServices(IServiceCollection services) public class Startup
{ {
services.AddApplication<AppModule>(); public void ConfigureServices(IServiceCollection services)
{
return services.BuildServiceProviderFromFactory(); services.AddApplication<AppModule>();
} }
public void Configure(IApplicationBuilder app) public void Configure(IApplicationBuilder app)
{ {
app.InitializeApplication(); app.InitializeApplication();
} }
} }
} }
```` ````
修改``ConfigureServices``方法的返回值为``IServiceProvider``(默认是``void``).这个修改允许我们替换AspNet Core的依赖注入框架. (参阅下面的Autofac集成部分). ``services.AddApplication<AppModule>()``添加了所有模块中定义的全部服务. ``services.AddApplication<AppModule>()``添加了所有``AppModule``模块中定义的全部服务.
``app.InitializeApplication()`` 调用 ``Configure`` 方法初始化并启动应用程序 ``Configure``方法中的``app.InitializeApplication()``完成初始化并启动应用程序.
### Hello World! ## 运行应用程序!
上面的应用程序没有什么功能,让我们创建一个MVC控制器实现一些功能: 启动该应用,它将按预期运行.
````C# ## 使用 Autofac 依赖注入框架
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc; 虽然AspNet Core的依赖注入(DI)系统适用于基本要求,但[Autofac](https://autofac.org/)提供了属性注入和方法拦截等高级功能,这些功能是ABP执行高级应用程序框架功能所必需的.
namespace BasicAspNetCoreApplication.Controllers 用Autofac取代AspNet Core的DI系统并集成到ABP非常简单.
{
public class HomeController : AbpController 1. 安装 [Volo.Abp.Autofac](https://www.nuget.org/packages/Volo.Abp.Autofac) 包
{
public IActionResult Index() ````
{ Install-Package Volo.Abp.Autofac
return Content("Hello World!"); ````
}
} 2. 添加 ``AbpAutofacModule`` 依赖
}
````C#
```` [DependsOn(typeof(AbpAspNetCoreMvcModule))]
[DependsOn(typeof(AbpAutofacModule))] // 在模块上添加依赖AbpAutofacModule
如果运行这个应用程序你会在页面中看到"Hello World!". public class AppModule : AbpModule
{
Derived ``HomeController`` from ``AbpController`` instead of standard ``Controller`` class. This is not required, but ``AbpController`` class has useful base properties and methods to make your development easier. ...
}
从``AbpController``派生``HomeController`` 而不是继承自``Controller``类.虽然这不是强制要求,但是``AbpController``类有很多有用的有属性和方法,使你的开发更容易. ````
### 使用 Autofac 依赖注入框架 3. 修改``Program.cs``以使用Autofac:
虽然AspNet Core的依赖注入(DI)系统适用于基本要求,但Autofac提供了属性注入和方法拦截等高级功能,这些功能是ABP执行高级应用程序框架功能所必需的. ````C#
using Microsoft.AspNetCore.Hosting;
用Autofac取代AspNet Core的DI系统并集成到ABP非常简单. using Microsoft.Extensions.Hosting;
1. 安装 Volo.Abp.Autofac 包 namespace BasicAspNetCoreApplication
{
```` public class Program
Install-Package Volo.Abp.Autofac {
```` public static void Main(string[] args)
{
2. 添加 ``AbpAutofacModule`` 依赖 CreateHostBuilder(args).Build().Run();
}
````C#
[DependsOn(typeof(AbpAspNetCoreMvcModule))] public static IHostBuilder CreateHostBuilder(string[] args) =>
[DependsOn(typeof(AbpAutofacModule))] // 在模块上添加依赖AbpAutofacModule Host.CreateDefaultBuilder(args)
public class AppModule : AbpModule .ConfigureWebHostDefaults(webBuilder =>
{ {
... webBuilder.UseStartup<Startup>();
} })
```` .UseAutofac(); // 添加这一行
}
3. 修改在``Startup``类下的``services.AddApplication<AppModule>();``如下所示: }
````
````C#
services.AddApplication<AppModule>(options => ## 源码
{
options.UseAutofac(); // 集成 Autofac 从[此处](https://github.com/abpframework/abp-samples/tree/master/BasicAspNetCoreApplication)获取本教程中创建的示例项目的源代码.
});
````
4. 更新 `Program.cs`代码, 不再使用`WebHost.CreateDefaultBuilder()`方法(因为它使用默认的DI容器):
````csharp
public class Program
{
public static void Main(string[] args)
{
/*
https://github.com/aspnet/AspNetCore/issues/4206#issuecomment-445612167
CurrentDirectoryHelpers 文件位于: \framework\src\Volo.Abp.AspNetCore.Mvc\Microsoft\AspNetCore\InProcess\CurrentDirectoryHelpers.cs
当升级到ASP.NET Core 3.0的时候将会删除这个类.
*/
CurrentDirectoryHelpers.SetCurrentDirectory();
BuildWebHostInternal(args).Run();
}
public static IWebHost BuildWebHostInternal(string[] args) =>
new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIIS()
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
}
````
### 源码
从[此处](https://github.com/abpframework/abp-samples/tree/master/BasicAspNetCoreApplication)获取本教程中创建的示例项目的源代码.

Loading…
Cancel
Save