mirror of https://github.com/abpframework/abp.git
committed by
GitHub
4 changed files with 477 additions and 0 deletions
@ -0,0 +1,186 @@ |
|||||
|
# Začínáme s ASP.NET Core MVC aplikací |
||||
|
|
||||
|
Tento tutoriál vysvětluje jak začít s ABP z ničeho s minimem závislostí. Obvykle chcete začít se **[startovací šablonou](https://abp.io/Templates)**. |
||||
|
|
||||
|
## Tvorba nového projektu |
||||
|
|
||||
|
1. Vytvořte novou prázdnou AspNet Core Web aplikaci ve Visual Studio: |
||||
|
|
||||
|
 |
||||
|
|
||||
|
2. Zvolte prázdnou šablonu |
||||
|
|
||||
|
 |
||||
|
|
||||
|
Můžete zvolit i jinou šablonu, ale pro demonstraci je lepší čístý projekt. |
||||
|
|
||||
|
## Instalace Volo.Abp.AspNetCore.Mvc balíku |
||||
|
|
||||
|
Volo.Abp.AspNetCore.Mvc je AspNet Core MVC integrační balík pro ABP. Takže ho nainstalujeme do projektu: |
||||
|
|
||||
|
```` |
||||
|
Install-Package Volo.Abp.AspNetCore.Mvc |
||||
|
```` |
||||
|
|
||||
|
## Tvorba prvního ABP modulu |
||||
|
|
||||
|
ABP je modulární framework a proto vyžaduje **spouštěcí (kořenový) modul** což je třída dědící z ``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 OnApplicationInitialization(ApplicationInitializationContext context) |
||||
|
{ |
||||
|
var app = context.GetApplicationBuilder(); |
||||
|
var env = context.GetEnvironment(); |
||||
|
|
||||
|
if (env.IsDevelopment()) |
||||
|
{ |
||||
|
app.UseDeveloperExceptionPage(); |
||||
|
} |
||||
|
|
||||
|
app.UseMvcWithDefaultRoute(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
```` |
||||
|
|
||||
|
``AppModule`` je dobrý název pro spouštěcí modul aplikace. |
||||
|
|
||||
|
ABP balíky definují modulové třídy a modul může mít závislost na jiný modul. V kódu výše, náš ``AppModule`` má závislost na ``AbpAspNetCoreMvcModule`` (definován v balíku Volo.Abp.AspNetCore.Mvc). Je běžné přidat ``DependsOn`` atribute po instalaci nového ABP NuGet balíku. |
||||
|
|
||||
|
Místo třídy Startup, konfigurujeme ASP.NET Core pipeline v této modulové třídě. |
||||
|
|
||||
|
## Třída Startup |
||||
|
|
||||
|
V dalším kroku upravíme Startup třídu k integraci ABP modulového systému: |
||||
|
|
||||
|
````C# |
||||
|
using System; |
||||
|
using Microsoft.AspNetCore.Builder; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
|
||||
|
namespace BasicAspNetCoreApplication |
||||
|
{ |
||||
|
public class Startup |
||||
|
{ |
||||
|
public IServiceProvider ConfigureServices(IServiceCollection services) |
||||
|
{ |
||||
|
services.AddApplication<AppModule>(); |
||||
|
|
||||
|
return services.BuildServiceProviderFromFactory(); |
||||
|
} |
||||
|
|
||||
|
public void Configure(IApplicationBuilder app) |
||||
|
{ |
||||
|
app.InitializeApplication(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
```` |
||||
|
|
||||
|
Změnili jsme metodu ``ConfigureServices`` aby vracela ``IServiceProvider`` místo ``void``. Tato změna nám dovoluje nahradit AspNet Core vkládání závislostí za jiný framework (více v sekci Autofac integrace níže). ``services.AddApplication<AppModule>()`` přidává všechny služby definované ve všech modulech počínaje ``AppModule``. |
||||
|
|
||||
|
Volání ``app.InitializeApplication()`` v metodě ``Configure`` inicializuje a spustí aplikaci. |
||||
|
|
||||
|
## Ahoj světe! |
||||
|
|
||||
|
Aplikace výše zatím nic nedělá. Pojďme proto vytvořit MVC controller, který už něco dělá: |
||||
|
|
||||
|
````C# |
||||
|
using Microsoft.AspNetCore.Mvc; |
||||
|
using Volo.Abp.AspNetCore.Mvc; |
||||
|
|
||||
|
namespace BasicAspNetCoreApplication.Controllers |
||||
|
{ |
||||
|
public class HomeController : AbpController |
||||
|
{ |
||||
|
public IActionResult Index() |
||||
|
{ |
||||
|
return Content("Hello World!"); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
```` |
||||
|
|
||||
|
Jakmile spustíte aplikaci, uvidíte na stránce zprávu "Hello World!". |
||||
|
|
||||
|
Odvození ``HomeController`` od ``AbpController`` místo standardní třídy ``Controller``. Toto není vyžadováno, ale třída ``AbpController`` má užitečné základní vlastnosti a metody, které usnadňují vývoj. |
||||
|
|
||||
|
## Použití Autofac jako frameworku pro vkládání závislostí |
||||
|
|
||||
|
Ačkoliv je AspNet Core systém pro vkládání závíslostí (DI) skvělý pro základní požadavky, Autofac poskytuje pokročilé funkce jako injekce vlastností nebo záchyt metod, které jsou v ABP užity k provádění pokročilých funkcí frameworku. |
||||
|
|
||||
|
Nahrazení AspNet Core DI systému za Autofac a integrace s ABP je snadná. |
||||
|
|
||||
|
1. Nainstalujeme [Volo.Abp.Autofac](https://www.nuget.org/packages/Volo.Abp.Autofac) balík |
||||
|
|
||||
|
```` |
||||
|
Install-Package Volo.Abp.Autofac |
||||
|
```` |
||||
|
|
||||
|
2. Přidáme ``AbpAutofacModule`` závislost |
||||
|
|
||||
|
````C# |
||||
|
[DependsOn(typeof(AbpAspNetCoreMvcModule))] |
||||
|
[DependsOn(typeof(AbpAutofacModule))] // Přidá závislost na AbpAutofacModule |
||||
|
public class AppModule : AbpModule |
||||
|
{ |
||||
|
... |
||||
|
} |
||||
|
```` |
||||
|
|
||||
|
3. Změníme řádek ``services.AddApplication<AppModule>();`` v třídě ``Startup`` následovně: |
||||
|
|
||||
|
````C# |
||||
|
services.AddApplication<AppModule>(options => |
||||
|
{ |
||||
|
options.UseAutofac(); // Integrace s Autofac |
||||
|
}); |
||||
|
```` |
||||
|
|
||||
|
4. Upravíme `Program.cs` aby nepoužíval metodu `WebHost.CreateDefaultBuilder()` jelikož ta používá výchozí DI kontejner: |
||||
|
|
||||
|
````csharp |
||||
|
public class Program |
||||
|
{ |
||||
|
public static void Main(string[] args) |
||||
|
{ |
||||
|
/* |
||||
|
https://github.com/aspnet/AspNetCore/issues/4206#issuecomment-445612167 |
||||
|
CurrentDirectoryHelpers exists in: \framework\src\Volo.Abp.AspNetCore.Mvc\Microsoft\AspNetCore\InProcess\CurrentDirectoryHelpers.cs |
||||
|
Will remove CurrentDirectoryHelpers.cs when upgrade to 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(); |
||||
|
} |
||||
|
```` |
||||
|
|
||||
|
## Zdrojový kód |
||||
|
|
||||
|
Získejte zdrojový kód vzorového projektu vytvořeného v tomto tutoriálů [z tohoto odkazu](https://github.com/abpframework/abp/tree/master/samples/BasicAspNetCoreApplication). |
||||
|
|
||||
@ -0,0 +1,102 @@ |
|||||
|
## Začínáme s ASP.NET Core MVC šablonou |
||||
|
|
||||
|
Tento tutoriál vysvětluje, jak vytvořit novou ASP.NET Core MVC webovou aplikaci pomocí úvodní šablony, jak ji nakonfigurovat a spustit. |
||||
|
|
||||
|
### Tvorba nového projektu |
||||
|
|
||||
|
Tento tutoriál používá k tvorbě nového projektu **ABP CLI**. Podívejte se na stránku [Začínáme](https://abp.io/get-started) pro více možností. |
||||
|
|
||||
|
Pokud ještě nemáte ABP CLI nainstalováno, učiňte tak pomocí okna příkazového řádku: |
||||
|
|
||||
|
````bash |
||||
|
dotnet tool install -g Volo.Abp.Cli |
||||
|
```` |
||||
|
|
||||
|
K tvorbě vašeho projektu použijte příkaz `abp new` v prázdné složce: |
||||
|
|
||||
|
````bash |
||||
|
abp new Acme.BookStore |
||||
|
```` |
||||
|
|
||||
|
> Můžete použít různé úrovně jmenných prostorů; např. BookStore, Acme.BookStore nebo Acme.Retail.BookStore. |
||||
|
|
||||
|
Příkaz `new` vytvoří **vrstvenou MVC aplikaci** s **Entity Framework Core** jako databázovým poskytovatelem. Jsou zde však i jiné možnosti. Podívejte se na [CLI dokumnentaci](CLI.md) pro všechny další možností. |
||||
|
|
||||
|
#### Požadavky |
||||
|
|
||||
|
Vytvořené řešení vyžaduje; |
||||
|
|
||||
|
* [Visual Studio 2017 (v15.9.0+)](https://visualstudio.microsoft.com/tr/downloads/) |
||||
|
* [.NET Core 2.2+](https://www.microsoft.com/net/download/dotnet-core/) |
||||
|
|
||||
|
### Struktura řešení |
||||
|
|
||||
|
Otevřete řešení ve **Visual Studio**: |
||||
|
|
||||
|
 |
||||
|
|
||||
|
Řešení má vrstvenou strukturu (založenou na [Domain Driven Design](Domain-Driven-Design.md)) a obsahuje projekty jednotkovových a integračních testů předkonfigurované pro práci s **EF Core** & **SQLite in-memory** databází. |
||||
|
|
||||
|
> Podívejte se na [dokument šablony MVC aplikace](Startup-Templates/Mvc.md) k detailnímu pochopení struktury řešení. |
||||
|
|
||||
|
### Connection string databáze |
||||
|
|
||||
|
Zkontrolujte **connection string** v souboru `appsettings.json` v projektu `.Web`: |
||||
|
|
||||
|
````json |
||||
|
{ |
||||
|
"ConnectionStrings": { |
||||
|
"Default": "Server=localhost;Database=BookStore;Trusted_Connection=True" |
||||
|
} |
||||
|
} |
||||
|
```` |
||||
|
|
||||
|
Řešení je nakonfigurováno k používání **Entity Framework Core** s **MS SQL Server**. EF Core podporuje [různé](https://docs.microsoft.com/en-us/ef/core/providers/) databázové poskytovatele, takže můžete použít i jiné DBMS. V případě potřeby změňte connection string. |
||||
|
|
||||
|
### Tvorba databáze & aplikace databázových migrací |
||||
|
|
||||
|
K vytvoření databáze máte dvě možnosti. |
||||
|
|
||||
|
#### Použití DbMigrator aplikace |
||||
|
|
||||
|
Řešení obsahuje konzolovou aplikaci (v tomto příkladu nazvanou `Acme.BookStore.DbMigrator`), která může vytvářet databáze, aplikovat migrace a vkládat seed data. Je užitečná jak pro vývojové, tak pro produkční prostředí. |
||||
|
|
||||
|
> Projekt `.DbMigrator` má vlastní `appsettings.json`. Takže pokud jste změnili connection string uvedený výše, musíte změnit také tento. |
||||
|
|
||||
|
Klikněte pravým na projekt `.DbMigrator` a vyberte **Set as StartUp Project**: |
||||
|
|
||||
|
 |
||||
|
|
||||
|
Zmáčkněte F5 (nebo Ctrl+F5) ke spuštění aplikace. Výstup bude vypadat následovně: |
||||
|
|
||||
|
 |
||||
|
|
||||
|
#### Použití EF Core Update-Database příkazu |
||||
|
|
||||
|
Ef Core má `Update-Database` příkaz, který v případě potřeby vytvoří databázi a aplikuje čekající migrace. Klikněte pravým na projekt `.Web` a vyberte **Set as StartUp Project**: |
||||
|
|
||||
|
 |
||||
|
|
||||
|
Otevřete **Package Manager Console**, vyberte projekt `.EntityFrameworkCore.DbMigrations` jako **Default Project** and spusťte příkaz `Update-Database`: |
||||
|
|
||||
|
 |
||||
|
|
||||
|
Dojde k vytvoření nové databáze na základě nakonfigurovaného connection stringu. |
||||
|
|
||||
|
> Použití nástroje `.Migrator` je doporučený způsob, jelikož zároveň vloží seed data nutné k správnému běhu webové aplikace. |
||||
|
|
||||
|
### Spuštění aplikace |
||||
|
|
||||
|
Ujistěte se že je projekt `.Web` nastaven jako startovací projekt. Spusťte aplikaci což následně otevře **úvodní** stránku ve vašem prohlížeči: |
||||
|
|
||||
|
 |
||||
|
|
||||
|
Klikněte na tlačítko **Přihlásit**, vložte `admin` jako uživatelské jméno a `1q2w3E*` jako heslo k přihlášení do aplikace. |
||||
|
|
||||
|
Startovací šabloná obsahuje **identity management** a **tenant management** moduly. Jakmile se přihlásite, budete mít přístup do nabídky Administrace, kde můžete spravovat **tenanty**, **role**, **uživatele** a jejich **oprávnění**. Správa uživatelů vypadá takto: |
||||
|
|
||||
|
 |
||||
|
|
||||
|
### Co dále? |
||||
|
|
||||
|
* [Tutoriál vývoje aplikace](Tutorials/AspNetCore-Mvc/Part-I.md) |
||||
@ -0,0 +1,181 @@ |
|||||
|
# Začínáme s konzolovou aplikací |
||||
|
|
||||
|
Tento tutoriál vysvětluje jak začít s ABP z ničeho s minimem závislostí. Obvykle chcete začít se **[startovací šablonou](https://abp.io/Templates)**. |
||||
|
|
||||
|
## Tvorba nového projektu |
||||
|
|
||||
|
Vytvořte regulérní .NET Core konzolovou aplikaci z Visual Studio: |
||||
|
|
||||
|
 |
||||
|
|
||||
|
## Instalace Volo.Abp balíku |
||||
|
|
||||
|
Volo.Abp.Core je základní NuGet balík k tvorbě aplikací založených na ABP. Takže ho nainstalujeme do projektu: |
||||
|
|
||||
|
```` |
||||
|
Install-Package Volo.Abp.Core |
||||
|
```` |
||||
|
|
||||
|
## Tvorba prvního ABP modulu |
||||
|
|
||||
|
ABP je modulární framework a proto vyžaduje **spouštěcí (kořenový) modul** což je třída dědící z ``AbpModule``: |
||||
|
|
||||
|
````C# |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Volo.Abp.Modularity; |
||||
|
|
||||
|
namespace AbpConsoleDemo |
||||
|
{ |
||||
|
public class AppModule : AbpModule |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
```` |
||||
|
|
||||
|
``AppModule`` je dobrý název pro spouštěcí modul aplikace. |
||||
|
|
||||
|
## Inicializace aplikace |
||||
|
|
||||
|
Dalším krokem je bootstrap aplikace pomocí spouštěcího modulu vytvořeného výše: |
||||
|
|
||||
|
````C# |
||||
|
using System; |
||||
|
using Volo.Abp; |
||||
|
|
||||
|
namespace AbpConsoleDemo |
||||
|
{ |
||||
|
class Program |
||||
|
{ |
||||
|
static void Main(string[] args) |
||||
|
{ |
||||
|
using (var application = AbpApplicationFactory.Create<AppModule>()) |
||||
|
{ |
||||
|
application.Initialize(); |
||||
|
|
||||
|
Console.WriteLine("Press ENTER to stop application..."); |
||||
|
Console.ReadLine(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
```` |
||||
|
|
||||
|
``AbpApplicationFactory`` se používá k vytvoření aplikace a načtení všech modulů, s využitím ``AppModule`` jako spouštěcím modulem. ``Initialize()`` metoda spouští aplikaci. |
||||
|
|
||||
|
## Ahoj světe! |
||||
|
|
||||
|
Aplikace výše zatím nic nedělá. Pojďme proto vytvořit službu která už něco dělá: |
||||
|
|
||||
|
````C# |
||||
|
using System; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
|
|
||||
|
namespace AbpConsoleDemo |
||||
|
{ |
||||
|
public class HelloWorldService : ITransientDependency |
||||
|
{ |
||||
|
public void SayHello() |
||||
|
{ |
||||
|
Console.WriteLine("Hello World!"); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
```` |
||||
|
|
||||
|
``ITransientDependency`` je speciální rozhraní ABP, které automaticky registruje službu jako přechodnou (více v [dokumentu vkládání závislostí](Dependency-Injection.md)). |
||||
|
|
||||
|
Nyní můžeme vyřešit ``HelloWorldService`` a vypsat naše ahoj. Změníme Program.cs podle vyobrazení níže: |
||||
|
|
||||
|
````C# |
||||
|
using System; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Volo.Abp; |
||||
|
|
||||
|
namespace AbpConsoleDemo |
||||
|
{ |
||||
|
class Program |
||||
|
{ |
||||
|
static void Main(string[] args) |
||||
|
{ |
||||
|
using (var application = AbpApplicationFactory.Create<AppModule>()) |
||||
|
{ |
||||
|
application.Initialize(); |
||||
|
|
||||
|
// Vyřeší službu a použije ji |
||||
|
var helloWorldService = |
||||
|
application.ServiceProvider.GetService<HelloWorldService>(); |
||||
|
helloWorldService.SayHello(); |
||||
|
|
||||
|
Console.WriteLine("Press ENTER to stop application..."); |
||||
|
Console.ReadLine(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
```` |
||||
|
|
||||
|
I když je to dostačující pro tento jednoduchý príklad kódu, je vždy lepší v případě přímého řešení závislostí z ``IServiceProvider`` vytvořit rámce (více v [dokumentu vkládání závislostí](Dependency-Injection.md)). |
||||
|
|
||||
|
## Využití Autofac jako frameworku pro vkládání závislostí |
||||
|
|
||||
|
Ačkoliv je AspNet Core systém pro vkládání závíslostí (DI) skvělý pro základní požadavky, Autofac poskytuje pokročilé funkce jako injekce vlastností nebo záchyt metod, které jsou v ABP užity k provádění pokročilých funkcí frameworku. |
||||
|
|
||||
|
Nahrazení AspNet Core DI systému za Autofac a integrace s ABP je snadná. |
||||
|
|
||||
|
1. Nainstalujeme [Volo.Abp.Autofac](https://www.nuget.org/packages/Volo.Abp.Autofac) balík |
||||
|
|
||||
|
``` |
||||
|
Install-Package Volo.Abp.Autofac |
||||
|
``` |
||||
|
|
||||
|
1. Přidáme ``AbpAutofacModule`` závislost |
||||
|
|
||||
|
```c# |
||||
|
[DependsOn(typeof(AbpAutofacModule))] // Přidá závislost na AbpAutofacModule |
||||
|
public class AppModule : AbpModule |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
1. Změníme soubor ``Program.cs`` podle vyobrazení níže: |
||||
|
|
||||
|
```c# |
||||
|
using System; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Volo.Abp; |
||||
|
|
||||
|
namespace AbpConsoleDemo |
||||
|
{ |
||||
|
class Program |
||||
|
{ |
||||
|
static void Main(string[] args) |
||||
|
{ |
||||
|
using (var application = AbpApplicationFactory.Create<AppModule>(options => |
||||
|
{ |
||||
|
options.UseAutofac(); // Autofac integrace |
||||
|
})) |
||||
|
{ |
||||
|
application.Initialize(); |
||||
|
|
||||
|
// Vyřeší službu a použije ji |
||||
|
var helloWorldService = |
||||
|
application.ServiceProvider.GetService<HelloWorldService>(); |
||||
|
helloWorldService.SayHello(); |
||||
|
|
||||
|
Console.WriteLine("Press ENTER to stop application..."); |
||||
|
Console.ReadLine(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
Stačí volat metodu `options.UseAutofac()` v možnostech `AbpApplicationFactory.Create`. |
||||
|
|
||||
|
## Zdrojový kód |
||||
|
|
||||
|
Získejte zdrojový kód vzorového projektu vytvořeného v tomto tutoriálů [z tohoto odkazu](https://github.com/abpframework/abp/tree/master/samples/BasicConsoleApplication). |
||||
Loading…
Reference in new issue