From af9cc3c7eee567a5b598f22771e8f0dfa698ff31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 15 Oct 2017 15:20:54 +0300 Subject: [PATCH] Created new document: Getting Started ABP With AspNet Core MVC Web Application --- .../Getting-Started-AspNetCore-Application.md | 153 ++++++++++++++++++ docs/Getting-Started-Console-Application.md | 4 +- docs/Index.md | 2 +- .../create-new-aspnet-core-application.png | Bin 0 -> 33930 bytes docs/images/select-empty-web-application.png | Bin 0 -> 26780 bytes .../BasicAspNetCoreApplication.sln | 25 +++ .../BasicAspNetCoreApplication/AppModule.cs | 34 ++++ .../BasicAspNetCoreApplication.csproj | 17 ++ .../Controllers/HomeController.cs | 13 ++ .../BasicAspNetCoreApplication/Program.cs | 25 +++ .../Properties/launchSettings.json | 27 ++++ .../BasicAspNetCoreApplication/Startup.cs | 25 +++ 12 files changed, 323 insertions(+), 2 deletions(-) create mode 100644 docs/Getting-Started-AspNetCore-Application.md create mode 100644 docs/images/create-new-aspnet-core-application.png create mode 100644 docs/images/select-empty-web-application.png create mode 100644 samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication.sln create mode 100644 samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/AppModule.cs create mode 100644 samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/BasicAspNetCoreApplication.csproj create mode 100644 samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/Controllers/HomeController.cs create mode 100644 samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/Program.cs create mode 100644 samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/Properties/launchSettings.json create mode 100644 samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/Startup.cs diff --git a/docs/Getting-Started-AspNetCore-Application.md b/docs/Getting-Started-AspNetCore-Application.md new file mode 100644 index 0000000000..32c3de4eab --- /dev/null +++ b/docs/Getting-Started-AspNetCore-Application.md @@ -0,0 +1,153 @@ +## Getting Started ABP With AspNet Core MVC Web Application + +### Create A New Project + +1. Create a new empty AspNet Core Web Application from Visual Studio: + +![](images/create-new-aspnet-core-application.png) + +2. Select Empty Template + +![](images/select-empty-web-application.png) + +You could select another template, but I want to show it from a clear project. + +### Install Volo.Abp.AspNetCore.Mvc Package + +Volo.Abp.AspNetCore.Mvc is AspNet Core MVC integration package for ABP. So, install it to your project: + +```` +Install-Package Volo.Abp.AspNetCore.Mvc +```` + +### Create First ABP Module + +ABP is a modular framework and it requires a **startup (root) module** class derived from ``AbpModule``: + +````C# +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; +using Volo.Abp.AspNetCore.Modularity; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.Modularity; + +namespace BasicAspNetCoreApplication +{ + [DependsOn(typeof(AbpAspNetCoreMvcModule))] + public class AppModule : AbpModule + { + public override void ConfigureServices(IServiceCollection services) + { + services.AddMvc(); + + services.AddAssemblyOf(); + } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + var app = context.GetApplicationBuilder(); + var env = context.GetEnvironment(); + + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseMvcWithDefaultRoute(); + } + } +} +```` + +``AppModule`` is a good name for the startup module for an application. + +A module class can register services to Dependency Injection by overriding ``ConfigureServices`` method as shown here. ``AddAssemblyOf<...>`` is a special extension method of ABP that registers all services in an assembly by convention (TODO: link to DI document). While this is optional, a module generally registers some services. + +ABP packages define module classes and a module can depend on another module. In the code above, our ``AppModule`` depends on ``AbpAspNetCoreMvcModule`` (defined by Volo.Abp.AspNetCore.Mvc package). It's common to add a ``DependsOn`` attribute after installing a new ABP nuget package. + +Instead of Startup class, we are registering dependencies and configuring AspNet Core pipeline in this module class. + +### The Startup Class + +Next step is to modify Startup class to integrate to ABP module system: + +````C# +using System; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; + +namespace BasicAspNetCoreApplication +{ + public class Startup + { + public IServiceProvider ConfigureServices(IServiceCollection services) + { + services.AddApplication(); + + return services.BuildServiceProviderFromFactory(); + } + + public void Configure(IApplicationBuilder app) + { + app.InitializeApplication(); + } + } +} + +```` + +Changed ``ConfigureServices`` method to return ``IServiceProvider`` instead of ``void``. This change allows us to replace AspNet Core's Dependency Injection with another framework (see Autofac integration section below). ``services.AddApplication()`` adds all services defined in all modules beginning from the ``AppModule``. + +``app.InitializeApplication()`` call in ``Configure`` method initializes and starts the application. + +### Hello World! + +The application above does nothing. Let's create an MVC controller does something: + +````C# +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc; + +namespace BasicAspNetCoreApplication.Controllers +{ + public class HomeController : AbpController + { + public IActionResult Index() + { + return Content("Hello World!"); + } + } +} + +```` + +If you run the application, you will see a "Hello World!" message on the page. + +Devided ``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. + +### Using Autofac as 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 easy. + +1. Install Volo.Abp.Autofac package + +```` +Install-Package Volo.Abp.Autofac +```` + +2. Change ``services.AddApplication();`` line in the ``Startup`` class as shown below: + +````C# +services.AddApplication(options => +{ + options.UseAutofac(); //Integrate to Autofac +}); +```` + +### Source Code + +Get source code of the sample project created in this tutorial from [here](../samples/BasicAspNetCoreApplication). \ No newline at end of file diff --git a/docs/Getting-Started-Console-Application.md b/docs/Getting-Started-Console-Application.md index 30c9d865d2..985a19bc02 100644 --- a/docs/Getting-Started-Console-Application.md +++ b/docs/Getting-Started-Console-Application.md @@ -34,7 +34,9 @@ namespace AbpConsoleDemo } ```` -``AppModule`` is a good name for the startup module for a console application. A module class can register services to Dependency Injection by overriding ``ConfigureServices`` method as shown here. ``AddAssemblyOf<...>`` is a special extension method of ABP that registers all services in an assembly by convention (TODO: link to DI document). While this is optional, a module generally registers some services. +``AppModule`` is a good name for the startup module for an application. + +A module class can register services to Dependency Injection by overriding ``ConfigureServices`` method as shown here. ``AddAssemblyOf<...>`` is a special extension method of ABP that registers all services in an assembly by convention (TODO: link to DI document). While this is optional, a module generally registers some services. ### Initialize The Application diff --git a/docs/Index.md b/docs/Index.md index ae05d01d9c..3f4f6a85cf 100644 --- a/docs/Index.md +++ b/docs/Index.md @@ -6,4 +6,4 @@ * Getting Started * With Console Application - * With ASP.NET Core Web Application \ No newline at end of file + * With ASP.NET Core Web Application \ No newline at end of file diff --git a/docs/images/create-new-aspnet-core-application.png b/docs/images/create-new-aspnet-core-application.png new file mode 100644 index 0000000000000000000000000000000000000000..fe78b9051d17521ea526fc3c27fbdd15e1810acc GIT binary patch literal 33930 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 literal 0 HcmV?d00001 diff --git a/docs/images/select-empty-web-application.png b/docs/images/select-empty-web-application.png new file mode 100644 index 0000000000000000000000000000000000000000..b0cd89a27a2b1f1bc2820ffb0e95d09551e2261b GIT binary patch literal 26780 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 ia|o(); + } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + var app = context.GetApplicationBuilder(); + var env = context.GetEnvironment(); + + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseMvcWithDefaultRoute(); + } + } +} \ No newline at end of file diff --git a/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/BasicAspNetCoreApplication.csproj b/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/BasicAspNetCoreApplication.csproj new file mode 100644 index 0000000000..0ac0472973 --- /dev/null +++ b/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/BasicAspNetCoreApplication.csproj @@ -0,0 +1,17 @@ + + + + netcoreapp2.0 + + + + + + + + + + + + + diff --git a/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/Controllers/HomeController.cs b/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/Controllers/HomeController.cs new file mode 100644 index 0000000000..aa694a0fae --- /dev/null +++ b/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/Controllers/HomeController.cs @@ -0,0 +1,13 @@ +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc; + +namespace BasicAspNetCoreApplication.Controllers +{ + public class HomeController : AbpController + { + public IActionResult Index() + { + return Content("Hello World!"); + } + } +} diff --git a/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/Program.cs b/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/Program.cs new file mode 100644 index 0000000000..380e69c4a7 --- /dev/null +++ b/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/Program.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace BasicAspNetCoreApplication +{ + public class Program + { + public static void Main(string[] args) + { + BuildWebHost(args).Run(); + } + + public static IWebHost BuildWebHost(string[] args) => + WebHost.CreateDefaultBuilder(args) + .UseStartup() + .Build(); + } +} diff --git a/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/Properties/launchSettings.json b/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/Properties/launchSettings.json new file mode 100644 index 0000000000..03755f8e91 --- /dev/null +++ b/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:63233/", + "sslPort": 0 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "BasicAspNetCoreApplication": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "http://localhost:63234/" + } + } +} diff --git a/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/Startup.cs b/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/Startup.cs new file mode 100644 index 0000000000..fcf3161267 --- /dev/null +++ b/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/Startup.cs @@ -0,0 +1,25 @@ +using System; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; + +namespace BasicAspNetCoreApplication +{ + public class Startup + { + public IServiceProvider ConfigureServices(IServiceCollection services) + { + services.AddApplication(options => + { + options.UseAutofac(); + }); + + return services.BuildServiceProviderFromFactory(); + } + + public void Configure(IApplicationBuilder app) + { + app.InitializeApplication(); + } + } +}