@ -0,0 +1,56 @@ |
|||
@keyframes spin { |
|||
0% { |
|||
transform: translateZ(0) rotate(0deg); |
|||
} |
|||
|
|||
100% { |
|||
transform: translateZ(0) rotate(360deg); |
|||
} |
|||
} |
|||
|
|||
.abp-block-area { |
|||
position: fixed; |
|||
top: 0; |
|||
left: 0; |
|||
width: 100%; |
|||
height: 100%; |
|||
z-index: 999999999; |
|||
background-color: #fff; |
|||
opacity: .8; |
|||
transition: opacity .25s; |
|||
} |
|||
|
|||
.abp-block-area.abp-block-area-disappearing { |
|||
opacity: 0; |
|||
} |
|||
|
|||
.abp-block-area.abp-block-area-busy:after { |
|||
content: attr(data-text); |
|||
display: block; |
|||
max-width: 125px; |
|||
position: absolute; |
|||
top: 50%; |
|||
left: 50%; |
|||
transform: translate(-50%, -50%); |
|||
font-size: 20px; |
|||
font-family: sans-serif; |
|||
color: #343a40; |
|||
text-align: center; |
|||
text-transform: uppercase; |
|||
} |
|||
|
|||
.abp-block-area.abp-block-area-busy:before { |
|||
content: ""; |
|||
display: block; |
|||
width: 150px; |
|||
height: 150px; |
|||
border-radius: 50%; |
|||
border-width: 2px; |
|||
border-style: solid; |
|||
border-color: transparent #228ae6 #228ae6 #228ae6; |
|||
position: absolute; |
|||
top: calc(50% - 75px); |
|||
left: calc(50% - 75px); |
|||
will-change: transform; |
|||
animation: spin .75s infinite ease-in-out; |
|||
} |
|||
@ -1,6 +1,6 @@ |
|||
/*! |
|||
* tui-editor |
|||
* @version 1.2.2 |
|||
* @version 1.2.6 |
|||
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com> (https://nhnent.github.io/tui.editor/)
|
|||
* @license MIT |
|||
*/ |
|||
|
|||
@ -0,0 +1,52 @@ |
|||
## Průvodce pro přispěvatele |
|||
|
|||
ABP je [open source](https://github.com/abpframework) a komunitně řízený projekt. Tento průvodce má za cíl pomoci každému kdo chce do projektu nějak přispět. |
|||
|
|||
### Příspěvek kódu |
|||
|
|||
Vždy můžete zaslat pull request do Github repositáře. |
|||
|
|||
- Naklonujte [ABP repozitář](https://github.com/abpframework/abp/) z Githubu. |
|||
- Učiňte potřebné změny. |
|||
- Zašlete pull request. |
|||
|
|||
Než budete dělat nějaké změny, diskutujte o nich prosím na [Github problémy](https://github.com/abpframework/abp/issues). Díky tomu nebude žádný jiný vývojář pracovat na stejném problému a Váš PR má lepší šanci na to být přijat. |
|||
|
|||
#### Opravy chyb a vylepšení |
|||
|
|||
Pokud chcete opravit známou chybu nebo pracovat na plánovaném vylepšení podívejte se na [seznam problémů](https://github.com/abpframework/abp/issues) na Githubu. |
|||
|
|||
#### Požadavky na funkce |
|||
|
|||
Pokud máte nápad na funkci pro framework nebo modul [vytvořte problém](https://github.com/abpframework/abp/issues/new) na Githubu nebo se připojte ke stávající diskuzi. V případě přijetí komunitou ho pak můžete implementovat. |
|||
|
|||
### Překlad dokumentů |
|||
|
|||
Pokud chcete přeložit celou [dokumentaci](https://abp.io/documents/) (včetně této stránky) do Vašeho rodného jazyka, následujte tyto kroky: |
|||
|
|||
* Naklonujte [ABP repozitář](https://github.com/abpframework/abp/) z Githubu. |
|||
* K přidání nového jazyka vytvořte novou složku v [docs](https://github.com/abpframework/abp/tree/master/docs). Název složky musí být "en", "es", "fr", "tr" atd. v závislosti na jazyku (navštivte [všechny jazykové kódy](https://msdn.microsoft.com/en-us/library/hh441729.aspx)). |
|||
* Pro referenci použijte ["en" složku](https://github.com/abpframework/abp/tree/master/docs/en) a její názvy souborů a strom složek. Při překladu této dokumentace zachovejte prosím tyto názvy stejné. |
|||
* Zašlete pull request (PR) po překladu jakéhokoliv dokumentu klidně i po jednom. Nečekejte až budete mít překlad všech dokumentů. |
|||
|
|||
### Lokalizace zdrojů |
|||
|
|||
ABP framework má flexibilní [lokalizační systém](../Localization.md). Můžete tak vytvořit lokalizované uživatelské prostředí pro svou vlastní aplikaci. |
|||
|
|||
K tomu mají framework a vestavěné moduly již lokalizované texty. Například [lokalizační texty pro Volo.Abp.UI balík](https://github.com/abpframework/abp/blob/master/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json). Můžete vytvořit nový soubor ve [stejné složce](https://github.com/abpframework/abp/tree/master/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi) k přidání překladu. |
|||
|
|||
* Naklonujte [ABP repozitář](https://github.com/abpframework/abp/) z Githubu. |
|||
* Vytvořte nový soubor pro cílový jazyk pro lokalizační text v (json) souboru (u souboru en.json). |
|||
* Zkopírujte veškerý text ze souboru en.json. |
|||
* Přeložte texty. |
|||
* Zašlete pull request na Githubu. |
|||
|
|||
ABP je modulářní framework, proto je zde mnoho zdrojů lokalizačních textů, jeden pro každý modul. K najití všech .json souborů, vyhledejte po naklonování repozitáře soubory "en.json". Můžete se taky podívat na [tento seznam](Localization-Text-Files.md) souborů lokalizačních textů. |
|||
|
|||
### Příspevky do blogu a návody |
|||
|
|||
Pokud se rozhodnete pro ABP vytvořit nějaké návody nebo příspěvky do blogu, dejte nám vědět (prostřednictvím [Github problémy](https://github.com/abpframework/abp/issues)), ať můžeme přidat odkaz na Váš návod/příspěvek v oficiální dokumentaci a oznámit na našem [Twitter účtu](https://twitter.com/abpframework). |
|||
|
|||
### Zpráva o chybě |
|||
|
|||
Pokud najdete chybu, [vytvořte prosím problém v Github repozitáři](https://github.com/abpframework/abp/issues/new). |
|||
@ -0,0 +1,40 @@ |
|||
## Textové soubory pro lokalizaci |
|||
|
|||
Toto je seznam lokalizačních textových souborů pro každého kdo chce přispět k překladu textů ve frameworku. Tento seznam budeme udržovat aktuální: |
|||
|
|||
* https://github.com/abpframework/abp/tree/master/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en.json |
|||
* https://github.com/abpframework/abp/tree/master/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpValidation/en.json |
|||
* https://github.com/abpframework/abp/tree/master/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/en.json |
|||
* https://github.com/abpframework/abp/tree/master/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json |
|||
* https://github.com/abpframework/abp/tree/master/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/en.json |
|||
* https://github.com/abpframework/abp/tree/master/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/en.json |
|||
* https://github.com/abpframework/abp/tree/master/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/en.json |
|||
* https://github.com/abpframework/abp/tree/master/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/en.json |
|||
* https://github.com/abpframework/abp/tree/master/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/en.json |
|||
* https://github.com/abpframework/abp/tree/master/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/en.json |
|||
* https://github.com/abpframework/abp/tree/master/modules/account/src/Volo.Abp.Account.Web/Localization/Resources/AbpAccount/Web/en.json |
|||
* https://github.com/abpframework/abp/tree/master/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/en.json |
|||
* https://github.com/abpframework/abp/tree/master/modules/blogging/src/Volo.Blogging.Web/Localization/Resources/Blogging/Web/en.json |
|||
* https://github.com/abpframework/abp/tree/master/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/en.json |
|||
* https://github.com/abpframework/abp/tree/master/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json |
|||
* https://github.com/abpframework/abp/tree/master/modules/docs/src/Volo.Docs.Admin.Web/Localization/Resources/Docs/Web/en.json |
|||
* https://github.com/abpframework/abp/tree/master/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json |
|||
* https://github.com/abpframework/abp/tree/master/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/Localization/ApplicationContracts/en.json |
|||
* https://github.com/abpframework/abp/tree/master/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/Localization/Domain/en.json |
|||
* https://github.com/abpframework/abp/tree/master/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Localization/Resources/FeatureManagement/en.json |
|||
* https://github.com/abpframework/abp/tree/master/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/Localization/ApplicationContracts/en.json |
|||
* https://github.com/abpframework/abp/tree/master/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/Localization/Domain/en.json |
|||
* https://github.com/abpframework/abp/tree/master/modules/identity/src/Volo.Abp.Identity.Web/Localization/Resources/AbpIdentity/en.json |
|||
* https://github.com/abpframework/abp/tree/master/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Localization/Resources/AbpPermissionManagement/en.json |
|||
* https://github.com/abpframework/abp/tree/master/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Localization/Resources/AbpSettingManagement/en.json |
|||
* https://github.com/abpframework/abp/tree/master/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/en.json |
|||
* https://github.com/abpframework/abp/tree/master/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/en.json |
|||
* https://github.com/abpframework/abp/tree/master/samples/BookStore/src/Acme.BookStore.Domain.Shared/Localization/BookStore/en.json |
|||
* https://github.com/abpframework/abp/tree/master/samples/DashboardDemo/src/DashboardDemo.Domain/Localization/DashboardDemo/en.json |
|||
* https://github.com/abpframework/abp/tree/master/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/ProductManagement/Localization/ApplicationContracts/en.json |
|||
* https://github.com/abpframework/abp/tree/master/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/ProductManagement/Localization/Domain/en.json |
|||
* https://github.com/abpframework/abp/tree/master/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/Localization/Resources/ProductManagement/en.json |
|||
* https://github.com/abpframework/abp/tree/master/templates/mvc-module/src/MyCompanyName.MyProjectName.Application.Contracts/Localization/MyProjectName/ApplicationContracts/en.json |
|||
* https://github.com/abpframework/abp/tree/master/templates/mvc-module/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/DomainShared/en.json |
|||
* https://github.com/abpframework/abp/tree/master/templates/mvc-module/src/MyCompanyName.MyProjectName.Web/Localization/MyProjectName/Web/en.json |
|||
* https://github.com/abpframework/abp/tree/master/templates/mvc/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en.json |
|||
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 6.7 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 153 KiB |
|
After Width: | Height: | Size: 146 KiB |
|
After Width: | Height: | Size: 144 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 154 KiB |
|
After Width: | Height: | Size: 69 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 5.9 KiB |
@ -0,0 +1,89 @@ |
|||
# ABP CLI, New Templates & Other Features with the v0.18 Release |
|||
|
|||
ABP v0.18 has been released with [80+ issues](https://github.com/abpframework/abp/milestone/16?closed=1) resolved and [550+ commits](https://github.com/abpframework/abp/compare/0.17.0.0...0.18.0) pushed. |
|||
|
|||
## Web Site Changes |
|||
|
|||
[abp.io](https://abp.io) web site is **completely renewed** to highlight the goals and important features of the ABP framework. Document & blog URLs are also changed: |
|||
|
|||
- `abp.io/documents` moved to [docs.abp.io](https://docs.abp.io). |
|||
- `abp.io/blog` moved to [blog.abp.io](https://blog.abp.io). |
|||
|
|||
## ABP CLI |
|||
|
|||
ABP CLI (Command Line Interface) is a new global command line tool to perform some common operations for ABP based solutions. Main functions are; |
|||
|
|||
* **Creating a new application** or module project. |
|||
* **Adding a new module** to an application. |
|||
* **Updating** all ABP related packages in a solution. |
|||
|
|||
ABP CLI is now the preferred way to create a new project, while you can still download a new project from the [get started](https://abp.io/get-started) page. |
|||
|
|||
### Usage |
|||
|
|||
Install the ABP CLI using a command line window: |
|||
|
|||
````bash |
|||
dotnet tool install -g Volo.Abp.Cli |
|||
```` |
|||
|
|||
Create a new application: |
|||
|
|||
````bash |
|||
abp new Acme.BookStore |
|||
```` |
|||
|
|||
Add a module to an application: |
|||
|
|||
````bash |
|||
abp add-module Volo.Blogging |
|||
```` |
|||
|
|||
Update all ABP related packages in a solution: |
|||
|
|||
````bash |
|||
abp update |
|||
```` |
|||
|
|||
See [ABP CLI documentation](https://docs.abp.io/en/abp/latest/CLI) for details. |
|||
|
|||
## New Templates |
|||
|
|||
In this release, we've renewed all startup templates. The main goal is to provide better startup templates based on Domain Driven Design layers those also allow to create tiered solutions (where Web and API layers can be physically separated). It also includes unit & integration test projects separated for different layers. |
|||
|
|||
The image below shows the new startup project for an MVC application. |
|||
|
|||
 |
|||
|
|||
See the [startup templates document](https://docs.abp.io/en/abp/latest/Startup-Templates/Index) for details. |
|||
|
|||
## Change Logs |
|||
|
|||
Here are some other features and enhancements coming with this release: |
|||
|
|||
* New [Volo.Abp.Dapper](https://www.nuget.org/packages/Volo.Abp.Dapper) package. |
|||
* New [Volo.Abp.Specifications](https://www.nuget.org/packages/Volo.Abp.Specifications) package. |
|||
* New data seed system with `IDataSeeder` service & `IDataSeedContributor` interface to allow a modular initial data seed system. |
|||
* Improved MemoryDB implementation to serialize/deserialize objects stored in memory, so it provides more realistic infrastructure for mocking database in unit/integration tests. |
|||
* Added multi-language support for the docs module. Used it for the [ABP documentation](https://docs.abp.io). |
|||
|
|||
See the [GitHub Release Notes](https://github.com/abpframework/abp/releases/tag/0.18.0) for all features, enhancements & bugfixes in this release. |
|||
|
|||
## Road Map |
|||
|
|||
One thing related to the ABP v1.0 release is .NET Core / ASP.NET Core 3.0 release. According to the [.NET Core road map](https://github.com/dotnet/core/blob/master/roadmap.md), 3.0 release has been scheduled for September 2019. |
|||
|
|||
ASP.NET Core comes with big changes and features. As a big breaking change, it will [only run on .NET Core](https://github.com/aspnet/Announcements/issues/324) (dropping .net standard support), so it will not work with full .net framework anymore. |
|||
|
|||
We had declared to release v1.0 in 2019 Q2. The main works we should do for v1.0 are; |
|||
|
|||
* Fill the gaps in current features. |
|||
* Refactor & improve the current APIs. |
|||
* Fix known bugs. |
|||
* Complete the documentation & tutorials. |
|||
|
|||
In addition to the work we should do, we are also considering to wait ASP.NET Core 3.0 release. Because, if we release ABP v1.0 before ASP.NET Core 3.0, we will have to release ABP v2.0 again in a short time and drop v1.0 support. So, we are considering to publish ABP v1.0 RC with ASP.NET Core 3.0 RC and align the final release date with Microsoft. |
|||
|
|||
## Want to Contribute? |
|||
|
|||
Thanks to the community for their support for ABP development. It is very appreciated. If you also want to contribute, see [this guide](https://github.com/abpframework/abp/blob/master/docs/en/Contribution/Index.md) as the beginning. |
|||
|
After Width: | Height: | Size: 13 KiB |
@ -0,0 +1,89 @@ |
|||
# ABP CLI,v0.18版本的新模板和其他功能 |
|||
|
|||
ABP v0.18已发布, 包含解决的[80+个issue](https://github.com/abpframework/abp/milestone/16?closed=1),[550+次提交](https://github.com/abpframework/abp/compare/0.17.0.0...0.18.0) |
|||
|
|||
## 网站更改 |
|||
|
|||
[abp.io](https://abp.io)网站**完全更新**以突出ABP框架的目标和重要功能.文档和博客网址也会更改: |
|||
|
|||
- `abp.io/documents`移至[docs.abp.io](https://docs.abp.io). |
|||
- `abp.io/blog`转移到[blog.abp.io](https://blog.abp.io). |
|||
|
|||
## ABP CLI |
|||
|
|||
ABP CLI(命令行界面)是一种新的全局命令行工具,用于执行基于ABP的解决方案的一些常见操作.主要功能是; |
|||
|
|||
* **创建新的应用程序**或模块项目. |
|||
* **向应用程序添加新模块**. |
|||
* **更新**解决方案中所有与ABP相关的包. |
|||
|
|||
ABP CLI现在是创建新项目的首选方式,你仍然可以从[开始](https://abp.io/get-started)页面下载新项目. |
|||
|
|||
### 用法 |
|||
|
|||
使用命令行窗口安装ABP CLI: |
|||
|
|||
```` bash |
|||
dotnet tool install -g Volo.Abp.Cli |
|||
```` |
|||
|
|||
创建一个新应用程序: |
|||
|
|||
```` bash |
|||
abp new Acme.BookStore |
|||
```` |
|||
|
|||
将模块添加到应用程序: |
|||
|
|||
```` bash |
|||
abp add-module Volo.Blogging |
|||
```` |
|||
|
|||
更新解决方案中所有与ABP相关的包: |
|||
|
|||
```` bash |
|||
abp update |
|||
```` |
|||
|
|||
有关详细信息,请参阅[ABP CLI文档](https://docs.abp.io/en/abp/latest/CLI). |
|||
|
|||
## 新模板 |
|||
|
|||
在此版本中,我们更新了所有启动模板.主要目标是提供基于领域驱动设计层的更好的启动模板,这些模板还允许创建分层解决方案(Web和API层可以在物理上分开).它还包括针对不同层分开的单元和集成测试项目. |
|||
|
|||
下图显示了MVC应用程序的新启动项目. |
|||
|
|||
 |
|||
|
|||
有关详细信息,请参阅[启动模板文档](https://docs.abp.io/en/abp/latest/Startup-Templates/Index). |
|||
|
|||
## 更改日志 |
|||
|
|||
以下是此版本附带的一些其他功能和增强功能: |
|||
|
|||
* 新[Volo.Abp.Dapper](https://www.nuget.org/packages/Volo.Abp.Dapper)包. |
|||
* 新[Volo.Abp.Specifications](https://www.nuget.org/packages/Volo.Abp.Specifications)包. |
|||
* 具有`IDataSeeder`服务和`IDataSeedContributor`接口的新数据种子系统,允许模块化初始数据种子系统. |
|||
* 改进了MemoryDB实现,以序列化/反序列化存储在内存中的对象,因此它为单元/集成测试中的数据库模拟提供了更真实的基础结构. |
|||
* 为docs模块添加了多语言支持.用于[ABP文档](https://docs.abp.io). |
|||
|
|||
有关此版本中的所有功能,增强功能和错误修正,请参阅[GitHub发行说明](https://github.com/abpframework/abp/releases/tag/0.18.0). |
|||
|
|||
## 路线图 |
|||
|
|||
与ABP v1.0版本相关的一件事是.NET Core / ASP.NET Core 3.0版本.根据[.NET核心路线图](https://github.com/dotnet/core/blob/master/roadmap.md),计划于2019年9月发布3.0版本. |
|||
|
|||
ASP.NET Core具有很大的变化和功能.作为一个重大的突破性变化,它将[仅在.NET Core上运行](https://github.com/aspnet/Announcements/issues/324)(删除.net标准支持),因此它不能用于完整.net框架了. |
|||
|
|||
我们已宣布在2019年第二季度发布v1.0.我们应该为v1.0做的主要工作是: |
|||
|
|||
* 填补当前功能的空白. |
|||
* 重构和改进当前的API. |
|||
* 修复已知的错误. |
|||
* 完成文档和教程. |
|||
|
|||
除了我们应该做的工作之外,我们还在考虑等待ASP.NET Core 3.0发布.因为,如果我们在ASP.NET Core 3.0之前发布ABP v1.0,我们将不得不在短时间内再次发布ABP v2.0并放弃v1.0支持.因此,我们正在考虑使用ASP.NET Core 3.0 RC发布ABP v1.0 RC,并将最终发布日期与Microsoft保持一致. |
|||
|
|||
## 想要贡献? |
|||
|
|||
感谢社区对ABP开发的支持.非常感谢.如果你还想参与,请参阅[本指南](https://github.com/abpframework/abp/blob/master/docs/en/Contribution/Index.md)作为开始. |
|||
|
After Width: | Height: | Size: 13 KiB |
@ -1,6 +1,158 @@ |
|||
# MVC Module 启动模板 |
|||
# MVC模块启动模板 |
|||
|
|||
TODO |
|||
可用此模板开发基于[模块开发最佳实践和约定](../Best-Practices/Index.md)的可**复用 [应用程序模块](../Modules/Index.md)** . 它同样适用于开发**微服务**. |
|||
|
|||
## 如何开始? |
|||
|
|||
你可以使用[ABP CLI](../CLI.md)创建基于此启动模板的新项目,或者你也可以在[入门](https://abp.io/get-started)页面创建并下载项目. 在这里我们使用CLI创建新项目. |
|||
|
|||
如果未安装ABP CLI,第一步是安装ABP CLI |
|||
|
|||
````bash |
|||
dotnet tool install -g Volo.Abp.Cli |
|||
```` |
|||
|
|||
然后使用 `abp new` 命令在空文件夹中创建新解决方案: |
|||
|
|||
````bash |
|||
abp new Acme.IssueManagement -t mvc-module |
|||
```` |
|||
|
|||
* `Acme.IssueManagement` 是解决方案的名称, 如*YourCompany.YourProduct*. 你可以使用单级或多级名称. |
|||
|
|||
### 无用户界面 |
|||
|
|||
默认情况模板附带一个UI,你可以使用`--no-ui`选项指定不包含UI层. |
|||
|
|||
````bash |
|||
abp new Acme.IssueManagement -t mvc-module --no-ui |
|||
```` |
|||
|
|||
## 解决方案结构 |
|||
|
|||
根据命令的选项,会创建略有不同的解决方案结构. 如果未指定选项,你会得到如下所示的解决方案: |
|||
|
|||
 |
|||
|
|||
项目组织在`src`和`test`和`host`文件夹中: |
|||
|
|||
* `src` 文件夹包含基于[DDD](../Domain-Driven-Design.md)原则分层的实际模块. |
|||
* `test` 文件夹包含单元和集成测试. |
|||
* `host` 文件夹包含具有不同配置的应用程序,用于演示在应用程序中如何托管模块. 这些不是模块的一部分,但开发时会很有用. |
|||
|
|||
下图展示了模块的层和项目的依赖关系: |
|||
|
|||
 |
|||
|
|||
下面介绍解决方案中的项目及依赖关系: |
|||
|
|||
### .Domain.Shared 项目 |
|||
|
|||
项目包含常量,枚举和其他对象,这些对象实际上是领域层的一部分,但是解决方案中所有的层/项目中都会使用到. |
|||
|
|||
例如 `IssueType` 枚举和 `IssueConsts` 类 (可能是 `Issue` 实体用到的常数字段,像`MaxTitleLength`)都适合放在这个项目中. |
|||
|
|||
* 该项目不依赖解决方案中的其他项目. 其他项目直接或间接依赖该项目. |
|||
|
|||
### .Domain 项目 |
|||
|
|||
解决方案的领域层. 它主要包含 [实体, 集合根](../Entities.md), [领域服务](../Domain-Services.md), [值类型](../Value-Types.md), [仓储接口](../Repositories.md) 和解决方案的其他领域对象. |
|||
|
|||
例如 `Issue` 实体, `IssueManager` 领域服务和 `IIssueRepository` 接口都适合放在这个项目中. |
|||
|
|||
* 它依赖 `.Domain.Shared` 项目,因为项目中会用到它的一些常量,枚举和定义其他对象. |
|||
|
|||
### .Application.Contracts 项目 |
|||
|
|||
项目主要包含 [应用服务](../Application-Services.md) **interfaces** 和应用层的 [数据传输对象](../Data-Transfer-Objects.md) (DTO). 它用于分离应用层的接口和实现. 这种方式可以将接口项目做为约定包共享给客户端. |
|||
|
|||
例如 `IIssueAppService` 接口和 `IssueCreationDto` 类都适合放在这个项目中. |
|||
|
|||
* 它依赖 `.Domain.Shared` 因为它可能会在应用接口和DTO中使用常量,枚举和其他的共享对象. |
|||
|
|||
### .Application 项目 |
|||
|
|||
项目包含 `.Application.Contracts` 项目的 [应用服务](../Application-Services.md) 接口**实现**. |
|||
|
|||
例如 `IssueAppService` 类适合放在这个项目中. |
|||
|
|||
* 它依赖 `.Application.Contracts` 项目, 因为它需要实现接口与使用DTO. |
|||
* 它依赖 `.Domain` 项目,因为它需要使用领域对象(实体,仓储接口等)执行应用程序逻辑. |
|||
|
|||
### .EntityFrameworkCore 项目 |
|||
|
|||
这是集成EF Core的项目. 它定义了 `DbContext` 并实现 `.Domain` 项目中定义的仓储接口. |
|||
|
|||
* 它依赖 `.Domain` 项目,因为它需要引用实体和仓储接口. |
|||
|
|||
> 如果不需要使用EF Core,可以删除此项目. |
|||
|
|||
### .MongoDB 项目 |
|||
|
|||
这是集成MongoDB的项目. |
|||
|
|||
* 它依赖 `.Domain` 项目,因为它需要引用实体和仓储接口. |
|||
|
|||
> 如果不需要使用MongoDB,可以删除此项目. |
|||
|
|||
#### Test 项目 |
|||
|
|||
解决方案有多个测试项目,每一层都会有一个: |
|||
|
|||
* `.Domain.Tests` 用于测试领域层. |
|||
* `.Application.Tests` 用于测试应用层. |
|||
* `.EntityFrameworkCore.Tests` 用于测试EF Core配置与自定义仓储. |
|||
* `.MongoDB.Tests` 用于测试MongoDB配置与自定义仓储. |
|||
* `.TestBase` 所有测试项目的基础(共享)项目. |
|||
|
|||
此外, `.HttpApi.Client.ConsoleTestApp` 是一个控制台应用程序(不是自动化测试项目),它用于演示DotNet应用程序中HTTP API的用法. |
|||
|
|||
测试项目是用于做集成测试的: |
|||
|
|||
* 它完全集成到ABP框架和应用程序的所有服务. |
|||
* 如果数据库提供程序是EF Core,测试项目会使用SQLite内存数据库,如果是MongoDB,它使用[Mongo2Go](https://github.com/Mongo2Go/Mongo2Go)库. |
|||
* 授权被禁用,任何的应用服务都可以在测试中轻松调用. |
|||
|
|||
你依然可以编写单元测试,只不过它很难写(因为你需要准备mock/fake对象),但它的运行速度更快(因为只测试单个类并跳过所有初始化过程). |
|||
|
|||
> 领域层和应用层测试使用EF Core. 如果你删除了EF Core集成项目或者要使用MongoDB测试这些层,需要手动的修改项目引用和依赖. |
|||
|
|||
### Host 项目 |
|||
|
|||
解决方案中有一些宿主应用程序可以在开发时运行模块. 在开发时会很有用. 除了正在开发的模块外,宿主应用程序包括其他模块: |
|||
|
|||
宿主应用程序支持两种类型的场景. |
|||
|
|||
#### 单体 (统一) 应用场景 |
|||
|
|||
如果模块含有UI, 那么 `.Web.Unified` 应用程序于在一个站点上托管UI和API. 它有自己的 `appsettings.json` 配置文件(包括数据库连接字符串)和EF Core数据库迁移. |
|||
|
|||
`.Web.Unified` 应用程序有一个名为`YourProjectName_Unified`的数据库(本例中名为 *IssueManagement_Unified*). |
|||
|
|||
> 如果你选择了 `--no-ui` 选项, 这个项目不会出现在你的解决方案中. |
|||
|
|||
##### 如何运行? |
|||
|
|||
将其设置成启动项, 使用包管理控制台运行 `Update-Database` 命令迁移数据库,然后运行应用程序. 默认用户名: `admin` 密码: `1q2w3E*`. |
|||
|
|||
#### 分离部署&数据库 场景 |
|||
|
|||
在这个场景中,有三个应用程序; |
|||
|
|||
* `.IdentityServer` 应用程序是其他应用程序使用的身份验证服务器,它有自己的 `appsettings.json` 包含数据库连接字符串和其他配置. |
|||
* `.HttpApi.Host` 托管模块的HTTP API. 它有自己的 `appsettings.json` 包含数据库连接字符串和其他配置. |
|||
* `.Web.Host` 托管模块的UI. 它包含 `appsettings.json` 文件, 但是其中没有数据库连接字符串, 因为它不需要连接到数据库, 它主要调用远程API服务器和身份认证服务器. |
|||
|
|||
下图展示了应用程序的关系: |
|||
|
|||
 |
|||
|
|||
`.Web.Host` 项目使用OpenId Connect身份认证从`.IdentityServer`获取当前用户的身份和访问令牌. 然后使用访问令牌调用 `.HttpApi.Host`. HTTP API 服务器使用bearer token验证访问令牌获取当前用户声明并授权用户. |
|||
|
|||
##### 如何运行? |
|||
|
|||
你需要按照以下顺序运行应用程序: |
|||
|
|||
- 首先, 运行 `.IdentityServer`,因为其他应用程序依赖它做身份认证. |
|||
- 然后运行 `.HttpApi.Host`,因为`.Web.Host`应用程序使用API接口. |
|||
- 最后运行 `.Web.Host` 使用用户名: `admin` 密码: `1q2w3E*` 登录到应用程序. |
|||
|
|||
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 38 KiB |
@ -0,0 +1,13 @@ |
|||
using System.Collections.Generic; |
|||
using Volo.Abp.AspNetCore.Mvc.UI.Bundling; |
|||
|
|||
namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.Core |
|||
{ |
|||
public class CoreStyleContributor : BundleContributor |
|||
{ |
|||
public override void ConfigureBundle(BundleConfigurationContext context) |
|||
{ |
|||
context.Files.AddIfNotContains("/libs/abp/core/abp.css"); |
|||
} |
|||
} |
|||
} |
|||
@ -1,16 +0,0 @@ |
|||
using System.Collections.Generic; |
|||
using Volo.Abp.AspNetCore.Mvc.UI.Bundling; |
|||
using Volo.Abp.AspNetCore.Mvc.UI.Packages.Core; |
|||
using Volo.Abp.Modularity; |
|||
|
|||
namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.FreezeUi |
|||
{ |
|||
[DependsOn(typeof(CoreScriptContributor))] |
|||
public class FreezeUiScriptContributor : BundleContributor |
|||
{ |
|||
public override void ConfigureBundle(BundleConfigurationContext context) |
|||
{ |
|||
context.Files.AddIfNotContains("/libs/freeze-ui/freeze-ui.min.css"); |
|||
} |
|||
} |
|||
} |
|||
@ -1,16 +0,0 @@ |
|||
using System.Collections.Generic; |
|||
using Volo.Abp.AspNetCore.Mvc.UI.Bundling; |
|||
using Volo.Abp.AspNetCore.Mvc.UI.Packages.Bootstrap; |
|||
using Volo.Abp.Modularity; |
|||
|
|||
namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.FreezeUi |
|||
{ |
|||
[DependsOn(typeof(BootstrapStyleContributor))] |
|||
public class FreezeUiStyleContributor : BundleContributor |
|||
{ |
|||
public override void ConfigureBundle(BundleConfigurationContext context) |
|||
{ |
|||
context.Files.AddIfNotContains("/libs/freeze-ui/freeze-ui.min.css"); |
|||
} |
|||
} |
|||
} |
|||
@ -1,46 +0,0 @@ |
|||
var abp = abp || {}; |
|||
(function ($) { |
|||
if (!window.FreezeUI || !$) { |
|||
return; |
|||
} |
|||
|
|||
/* MESSAGE **************************************************/ |
|||
/*Package from https://alexradulescu.github.io/freeze-ui/*/ |
|||
|
|||
abp.ui = abp.ui || {}; |
|||
|
|||
/* UI BLOCK */ |
|||
|
|||
abp.ui.block = function (elm) { |
|||
if (elm) { |
|||
window.FreezeUI({ selector: elm }); |
|||
} else { |
|||
window.FreezeUI(); |
|||
} |
|||
}; |
|||
|
|||
abp.ui.unblock = function () { |
|||
window.UnFreezeUI(); |
|||
}; |
|||
|
|||
/* UI BUSY */ |
|||
|
|||
abp.ui.setBusy = function (element, text, freezeDelay) { |
|||
var opt = { text : text ? text : ' ' }; |
|||
|
|||
if (element) { |
|||
opt.element = element; |
|||
} |
|||
|
|||
if (freezeDelay) { |
|||
opt.freezeDelay = freezeDelay; |
|||
} |
|||
|
|||
window.FreezeUI(opt); |
|||
}; |
|||
|
|||
abp.ui.clearBusy = function () { |
|||
window.UnFreezeUI(); |
|||
}; |
|||
|
|||
})(jQuery); |
|||
@ -0,0 +1,63 @@ |
|||
using System; |
|||
|
|||
namespace Microsoft.AspNetCore.InProcess |
|||
{ |
|||
/// <summary>
|
|||
/// https://github.com/aspnet/AspNetCore.Docs/blob/master/aspnetcore/host-and-deploy/aspnet-core-module/samples_snapshot/2.x/CurrentDirectoryHelpers.cs
|
|||
/// TODO: Remove CurrentDirectoryHelpers.cs when upgrade to ASP.NET Core 3.0.
|
|||
/// </summary>
|
|||
public class CurrentDirectoryHelpers |
|||
{ |
|||
internal const string AspNetCoreModuleDll = "aspnetcorev2_inprocess.dll"; |
|||
|
|||
[System.Runtime.InteropServices.DllImport("kernel32.dll")] |
|||
private static extern IntPtr GetModuleHandle(string lpModuleName); |
|||
|
|||
[System.Runtime.InteropServices.DllImport(AspNetCoreModuleDll)] |
|||
private static extern int http_get_application_properties(ref IISConfigurationData iiConfigData); |
|||
|
|||
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)] |
|||
private struct IISConfigurationData |
|||
{ |
|||
public IntPtr pNativeApplication; |
|||
[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.BStr)] |
|||
public string pwzFullApplicationPath; |
|||
[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.BStr)] |
|||
public string pwzVirtualApplicationPath; |
|||
public bool fWindowsAuthEnabled; |
|||
public bool fBasicAuthEnabled; |
|||
public bool fAnonymousAuthEnable; |
|||
} |
|||
|
|||
public static void SetCurrentDirectory() |
|||
{ |
|||
try |
|||
{ |
|||
// Check if physical path was provided by ANCM
|
|||
var sitePhysicalPath = Environment.GetEnvironmentVariable("ASPNETCORE_IIS_PHYSICAL_PATH"); |
|||
if (string.IsNullOrEmpty(sitePhysicalPath)) |
|||
{ |
|||
// Skip if not running ANCM InProcess
|
|||
if (GetModuleHandle(AspNetCoreModuleDll) == IntPtr.Zero) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
IISConfigurationData configurationData = default(IISConfigurationData); |
|||
if (http_get_application_properties(ref configurationData) != 0) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
sitePhysicalPath = configurationData.pwzFullApplicationPath; |
|||
} |
|||
|
|||
Environment.CurrentDirectory = sitePhysicalPath; |
|||
} |
|||
catch |
|||
{ |
|||
// ignore
|
|||
} |
|||
} |
|||
} |
|||
} |
|||