From 20ff399252ad4ddc7c4cf17f0d154bcacb33492f Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 10 Aug 2020 11:06:52 +0800 Subject: [PATCH] Update console application template document --- .../en/Getting-Started-Console-Application.md | 180 +----------------- docs/en/Startup-Templates/Console.md | 8 +- .../basic-console-application-solution.png | Bin 0 -> 30620 bytes .../Getting-Started-Console-Application.md | 123 +----------- docs/zh-Hans/Startup-Templates/Console.md | 10 +- .../basic-console-application-solution.png | Bin 0 -> 30620 bytes 6 files changed, 18 insertions(+), 303 deletions(-) create mode 100644 docs/en/images/basic-console-application-solution.png create mode 100644 docs/zh-Hans/images/basic-console-application-solution.png diff --git a/docs/en/Getting-Started-Console-Application.md b/docs/en/Getting-Started-Console-Application.md index d5f3c8519b..2912725edf 100644 --- a/docs/en/Getting-Started-Console-Application.md +++ b/docs/en/Getting-Started-Console-Application.md @@ -1,181 +1,3 @@ # Getting Started ABP With Console Application -This tutorial explains how to start ABP from scratch with minimal dependencies. You generally want to start with a **[startup template](https://abp.io/Templates)**. - -## Create A New Project - -Create a new Regular .Net Core Console Application from Visual Studio: - -![](images/create-new-net-core-console-application.png) - -## Install Volo.Abp Package - -Volo.Abp.Core is the core nuget package to create ABP based applications. So, install it to your project: - -```` -Install-Package Volo.Abp.Core -```` - -## Create First ABP Module - -ABP is a modular framework and it requires a **startup (root) module** class derived from ``AbpModule``: - -````C# -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.Modularity; - -namespace AbpConsoleDemo -{ - public class AppModule : AbpModule - { - - } -} -```` - -``AppModule`` is a good name for the startup module for an application. - -## Initialize The Application - -The next step is to bootstrap the application using the startup module created above: - -````C# -using System; -using Volo.Abp; - -namespace AbpConsoleDemo -{ - class Program - { - static void Main(string[] args) - { - using (var application = AbpApplicationFactory.Create()) - { - application.Initialize(); - - Console.WriteLine("Press ENTER to stop application..."); - Console.ReadLine(); - } - } - } -} - -```` - -``AbpApplicationFactory`` is used to create the application and load all modules taking ``AppModule`` as the startup module. ``Initialize()`` method starts the application. - -## Hello World! - -The application above does nothing. Let's create a service that does something: - -````C# -using System; -using Volo.Abp.DependencyInjection; - -namespace AbpConsoleDemo -{ - public class HelloWorldService : ITransientDependency - { - public void SayHello() - { - Console.WriteLine("Hello World!"); - } - } -} - -```` - -``ITransientDependency`` is a special interface of ABP that automatically registers the service as transient (see [dependency injection document](Dependency-Injection.md)). - -Now, we can resolve the ``HelloWorldService`` and say hello. Change the Program.cs as shown below: - -````C# -using System; -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp; - -namespace AbpConsoleDemo -{ - class Program - { - static void Main(string[] args) - { - using (var application = AbpApplicationFactory.Create()) - { - application.Initialize(); - - //Resolve a service and use it - var helloWorldService = - application.ServiceProvider.GetService(); - helloWorldService.SayHello(); - - Console.WriteLine("Press ENTER to stop application..."); - Console.ReadLine(); - } - } - } -} -```` - -While it's enough for this simple code example, it's always suggested to create scopes in case of directly resolving dependencies from ``IServiceProvider`` (see the [Dependency Injection documentation](Dependency-Injection.md)). - -## Using Autofac as the Dependency Injection Framework - -While AspNet Core's Dependency Injection (DI) system is fine for basic requirements, Autofac provides advanced features like Property Injection and Method Interception which are required by ABP to perform advanced application framework features. - -Replacing AspNet Core's DI system by Autofac and integrating to ABP is pretty easy. - -1. Install [Volo.Abp.Autofac](https://www.nuget.org/packages/Volo.Abp.Autofac) package - -``` -Install-Package Volo.Abp.Autofac -``` - -1. Add ``AbpAutofacModule`` Dependency - -```c# -[DependsOn(typeof(AbpAutofacModule))] //Add dependency to the AbpAutofacModule -public class AppModule : AbpModule -{ - -} -``` - -1. Change ``Program.cs`` file as shown below: - -```c# -using System; -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp; - -namespace AbpConsoleDemo -{ - class Program - { - static void Main(string[] args) - { - using (var application = AbpApplicationFactory.Create(options => - { - options.UseAutofac(); //Autofac integration - })) - { - application.Initialize(); - - //Resolve a service and use it - var helloWorldService = - application.ServiceProvider.GetService(); - helloWorldService.SayHello(); - - Console.WriteLine("Press ENTER to stop application..."); - Console.ReadLine(); - } - } - } -} -``` - -Just called `options.UseAutofac()` method in the `AbpApplicationFactory.Create` options. - -## Source Code - -Get source code of the sample project created in this tutorial from [here](https://github.com/abpframework/abp-samples/tree/master/BasicConsoleApplication). +ABP provided console application startup template. See [Console Application Startup Template](../en/Startup-Templates/Console.md) document for more information. \ No newline at end of file diff --git a/docs/en/Startup-Templates/Console.md b/docs/en/Startup-Templates/Console.md index d42d6f913a..f458401af7 100644 --- a/docs/en/Startup-Templates/Console.md +++ b/docs/en/Startup-Templates/Console.md @@ -18,4 +18,10 @@ abp new Acme.MyConsoleApp -t console `Acme.MyConsoleApp` is the solution name, like *YourCompany.YourProduct*. You can use single level, two-levels or three-levels naming. -### \ No newline at end of file +## Solution Structure + +After you use the above command to create a solution, you will have a solution like shown below: + +![basic-console-application-solution](../images/basic-console-application-solution.png) + +* `HelloWorldService` is a sample service that implements the `ITransientDependency` interface. It will be automatically registered to the [dependency injection](../Dependency-Injection.md) system. \ No newline at end of file diff --git a/docs/en/images/basic-console-application-solution.png b/docs/en/images/basic-console-application-solution.png new file mode 100644 index 0000000000000000000000000000000000000000..788bad038157a96dee442b16dc20a3ef24eeb35e GIT binary patch literal 30620 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 - { - application.Initialize(); - - Console.WriteLine("Press ENTER to stop application..."); - Console.ReadLine(); - } - } - } -} - -```` - -``AbpApplicationFactory`` 用于创建应用程序并加载所有以``AppModule``作为启动模块的模块. ``Initialize()``方法启动应用程序. - -### Hello World! - -上面的应用程序什么都不做, 让我们创建一个服务做一些事情: - -````C# -using System; -using Volo.Abp.DependencyInjection; - -namespace AbpConsoleDemo -{ - public class HelloWorldService : ITransientDependency - { - public void SayHello() - { - Console.WriteLine("Hello World!"); - } - } -} - -```` - -``ITransientDependency``是ABP的一个特殊接口, 它自动将服务注册为**Transient**(参见[依赖注入文档](Dependency-Injection.md)). - -现在,我们可以解析``HelloWorldService``并调用``SayHello``. 更改Program.cs, 如下所示: - -````C# -using System; -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp; - -namespace AbpConsoleDemo -{ - class Program - { - static void Main(string[] args) - { - using (var application = AbpApplicationFactory.Create()) - { - application.Initialize(); - - // 解析服务并使用它 - var helloWorldService = - application.ServiceProvider.GetService(); - helloWorldService.SayHello(); - - Console.WriteLine("Press ENTER to stop application..."); - Console.ReadLine(); - } - } - } -} -```` - -这对于这个简单的代码示例已足够, 如果是直接从``IServiceProvider``解析建议创建**Scoped**依赖.(参见[依赖注入文档](Dependency-Injection.md)). - -### 源码 - -从[这里](https://github.com/abpframework/abp-samples/tree/master/BasicConsoleApplication)获取本教程中创建的示例项目的源代码. \ No newline at end of file +ABP提供了控制台应用程序启动模板. 参阅[控制台应用程序启动模板]文档了解更多信息. \ No newline at end of file diff --git a/docs/zh-Hans/Startup-Templates/Console.md b/docs/zh-Hans/Startup-Templates/Console.md index caeb036d3d..c7299cd938 100644 --- a/docs/zh-Hans/Startup-Templates/Console.md +++ b/docs/zh-Hans/Startup-Templates/Console.md @@ -16,4 +16,12 @@ dotnet tool install -g Volo.Abp.Cli abp new Acme.MyConsoleApp -t console ```` -`Acme.MyConsoleApp` 是解决方案的名称, 如*YourCompany.YourProduct*. 你可以使用单级或多级名称. \ No newline at end of file +`Acme.MyConsoleApp` 是解决方案的名称, 如*YourCompany.YourProduct*. 你可以使用单级或多级名称. + +## 解决方案结构 + +使用以上命令创建解决方案后,你会得到如下所示的解决方案: + +![basic-console-application-solution](../images/basic-console-application-solution.png) + +* `HelloWorldService` 是一个实现了 `ITransientDependency` 接口的示例服务. 它会自动注册到[依赖注入](../Dependency-Injection.md)系统. \ No newline at end of file diff --git a/docs/zh-Hans/images/basic-console-application-solution.png b/docs/zh-Hans/images/basic-console-application-solution.png new file mode 100644 index 0000000000000000000000000000000000000000..788bad038157a96dee442b16dc20a3ef24eeb35e GIT binary patch literal 30620 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