Sdílení kontrolerů, zobrazení, Razor stránek a dalších prvků pomocí částí aplikace
Autor: Rick Anderson
Zobrazení nebo stažení ukázkového kódu (postup stažení)
Část aplikace je abstrakce prostředků aplikace. Části aplikace umožňují ASP.NET Core zjišťovat kontrolery, zobrazovat komponenty, pomocné rutiny značek, Razor stránky, razor zdroje kompilace a další. AssemblyPart je součástí aplikace. AssemblyPart
zapouzdřuje odkaz na sestavení a zveřejňuje typy a odkazy na kompilaci.
Poskytovatelé funkcí pracují s částmi aplikací a naplňují funkce aplikace ASP.NET Core. Hlavním případem použití částí aplikace je konfigurace aplikace, která zjišťuje (nebo se nenačítá) ASP.NET základních funkcí ze sestavení. Můžete například chtít sdílet společné funkce mezi více aplikacemi. Pomocí částí aplikace můžete sdílet sestavení (DLL) obsahující kontrolery, zobrazení, Razor stránky, razor zdroje kompilace, pomocné rutiny značek a další s více aplikacemi. Sdílení sestavení je upřednostňované k duplikování kódu ve více projektech.
ASP.NET základní aplikace načítají funkce z ApplicationPart. Třída AssemblyPart představuje aplikační část, která je podporována sestavením.
Načtení funkcí ASP.NET Core
Microsoft.AspNetCore.Mvc.ApplicationParts Pomocí a AssemblyPart tříd můžete zjišťovat a načítat základní funkce ASP.NET (kontrolery, zobrazení komponent atd.). Sleduje ApplicationPartManager dostupné části aplikace a poskytovatele funkcí. ApplicationPartManager
je nakonfigurován v Startup.ConfigureServices
:
// Requires using System.Reflection;
public void ConfigureServices(IServiceCollection services)
{
var assembly = typeof(MySharedController).Assembly;
services.AddControllersWithViews()
.AddApplicationPart(assembly)
.AddRazorRuntimeCompilation();
services.Configure<MvcRazorRuntimeCompilationOptions>(options =>
{ options.FileProviders.Add(new EmbeddedFileProvider(assembly)); });
}
Následující kód nabízí alternativní přístup ke konfiguraci ApplicationPartManager
pomocí AssemblyPart
:
// Requires using System.Reflection;
// Requires using Microsoft.AspNetCore.Mvc.ApplicationParts;
public void ConfigureServices(IServiceCollection services)
{
var assembly = typeof(MySharedController).Assembly;
// This creates an AssemblyPart, but does not create any related parts for items such as views.
var part = new AssemblyPart(assembly);
services.AddControllersWithViews()
.ConfigureApplicationPartManager(apm => apm.ApplicationParts.Add(part));
}
Předchozí dva ukázky kódu načtou SharedController
ze sestavení. Není SharedController
v projektu aplikace. Podívejte se na ukázkové stažení řešení WebAppParts.
Zahrnout zobrazení
K zahrnutí zobrazení do sestavení použijte knihovnu Razor tříd.
Zabránění načítání prostředků
Části aplikace lze použít k tomu, aby se zabránilo načítání prostředků v určitém sestavení nebo umístění. Přidejte nebo odeberte členy Microsoft.AspNetCore.Mvc.ApplicationParts kolekce a skryjte nebo zpřístupňujte prostředky. Pořadí položek v kolekci ApplicationParts
není důležité. ApplicationPartManager
Nakonfigurujte službu před použitím ke konfiguraci služeb v kontejneru. Například nakonfigurujte ApplicationPartManager
před vyvoláním AddControllersAsServices
. Voláním Remove
ApplicationParts
kolekce odeberte prostředek.
Mezi ApplicationPartManager
tyto části patří:
- Sestavení a závislá sestavení aplikace.
Microsoft.AspNetCore.Mvc.ApplicationParts.CompiledRazorAssemblyPart
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
Microsoft.AspNetCore.Mvc.TagHelpers
.Microsoft.AspNetCore.Mvc.Razor
.
Poskytovatelé funkcí
Poskytovatelé funkcí aplikací prověřují části aplikací a poskytují funkce pro tyto části. Existují integrovaní poskytovatelé funkcí pro následující funkce ASP.NET Core:
- ControllerFeatureProvider
- TagHelperFeatureProvider
- MetadataReferenceFeatureProvider
- ViewsFeatureProvider
internal class
RazorCompiledItemFeatureProvider
Poskytovatelé funkcí dědí z IApplicationFeatureProvider<TFeature>, kde T
je typ funkce. Poskytovatelé funkcí je možné implementovat pro kterýkoli z dříve uvedených typů funkcí. Pořadí poskytovatelů funkcí v běhu ApplicationPartManager.FeatureProviders
může mít vliv na chování doby běhu. Později přidaní poskytovatelé můžou reagovat na akce provedené dříve přidanými poskytovateli.
Zobrazení dostupných funkcí
Funkce dostupné pro aplikaci je možné vyčíslit vyžádáním ApplicationPartManager
injektáže závislostí:
using AppPartsSample.ViewModels;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ApplicationParts;
using Microsoft.AspNetCore.Mvc.Controllers;
using System.Linq;
using Microsoft.AspNetCore.Mvc.Razor.Compilation;
using Microsoft.AspNetCore.Mvc.Razor.TagHelpers;
using Microsoft.AspNetCore.Mvc.ViewComponents;
namespace AppPartsSample.Controllers
{
public class FeaturesController : Controller
{
private readonly ApplicationPartManager _partManager;
public FeaturesController(ApplicationPartManager partManager)
{
_partManager = partManager;
}
public IActionResult Index()
{
var viewModel = new FeaturesViewModel();
var controllerFeature = new ControllerFeature();
_partManager.PopulateFeature(controllerFeature);
viewModel.Controllers = controllerFeature.Controllers.ToList();
var tagHelperFeature = new TagHelperFeature();
_partManager.PopulateFeature(tagHelperFeature);
viewModel.TagHelpers = tagHelperFeature.TagHelpers.ToList();
var viewComponentFeature = new ViewComponentFeature();
_partManager.PopulateFeature(viewComponentFeature);
viewModel.ViewComponents = viewComponentFeature.ViewComponents.ToList();
return View(viewModel);
}
}
}
Ukázka stahování používá předchozí kód k zobrazení funkcí aplikace:
Controllers:
- FeaturesController
- HomeController
- HelloController
- GenericController`1
- GenericController`1
Tag Helpers:
- PrerenderTagHelper
- AnchorTagHelper
- CacheTagHelper
- DistributedCacheTagHelper
- EnvironmentTagHelper
- Additional Tag Helpers omitted for brevity.
View Components:
- SampleViewComponent
Zjišťování v částech aplikace
Chyby HTTP 404 nejsou neobvyklé při vývoji částí aplikace. Tyto chyby jsou obvykle způsobeny chybějícím základním požadavkem na zjištění částí aplikací. Pokud vaše aplikace vrátí chybu HTTP 404, ověřte splnění následujících požadavků:
- Nastavení
applicationName
musí být nastaveno na kořenové sestavení použité ke zjišťování. Kořenové sestavení používané ke zjišťování je obvykle sestavení vstupního bodu. - Kořenové sestavení musí mít odkaz na části používané ke zjišťování. Odkaz může být přímý nebo tranzitivní.
- Kořenové sestavení musí odkazovat na webovou sadu SDK. Architektura má logiku, která zapisuje atributy do kořenového sestavení, které se používají ke zjišťování.
Autor: Rick Anderson
Zobrazení nebo stažení ukázkového kódu (postup stažení)
Část aplikace je abstrakce prostředků aplikace. Části aplikace umožňují ASP.NET Core zjišťovat kontrolery, zobrazovat komponenty, pomocné rutiny značek, Razor stránky, razor zdroje kompilace a další. AssemblyPart je součástí aplikace. AssemblyPart
zapouzdřuje odkaz na sestavení a zveřejňuje typy a odkazy na kompilaci.
Poskytovatelé funkcí pracují s částmi aplikací a naplňují funkce aplikace ASP.NET Core. Hlavním případem použití částí aplikace je konfigurace aplikace, která zjišťuje (nebo se nenačítá) ASP.NET základních funkcí ze sestavení. Můžete například chtít sdílet společné funkce mezi více aplikacemi. Pomocí částí aplikace můžete sdílet sestavení (DLL) obsahující kontrolery, zobrazení, Razor stránky, razor zdroje kompilace, pomocné rutiny značek a další s více aplikacemi. Sdílení sestavení je upřednostňované k duplikování kódu ve více projektech.
ASP.NET základní aplikace načítají funkce z ApplicationPart. Třída AssemblyPart představuje aplikační část, která je podporována sestavením.
Načtení funkcí ASP.NET Core
ApplicationPart
Pomocí a AssemblyPart
tříd můžete zjišťovat a načítat základní funkce ASP.NET (kontrolery, zobrazení komponent atd.). Sleduje ApplicationPartManager dostupné části aplikace a poskytovatele funkcí. ApplicationPartManager
je nakonfigurován v Startup.ConfigureServices
:
public void ConfigureServices(IServiceCollection services)
{
// Requires using System.Reflection;
var assembly = typeof(MySharedController).GetTypeInfo().Assembly;
services.AddMvc()
.AddApplicationPart(assembly)
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
Následující kód nabízí alternativní přístup ke konfiguraci ApplicationPartManager
pomocí AssemblyPart
:
public void ConfigureServices(IServiceCollection services)
{
// Requires using System.Reflection;
// Requires using Microsoft.AspNetCore.Mvc.ApplicationParts;
var assembly = typeof(MySharedController).GetTypeInfo().Assembly;
var part = new AssemblyPart(assembly);
services.AddMvc()
.ConfigureApplicationPartManager(apm => apm.ApplicationParts.Add(part))
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
Předchozí dva ukázky kódu načtou SharedController
ze sestavení. Není SharedController
v projektu aplikace. Podívejte se na ukázkové stažení řešení WebAppParts.
Zahrnout zobrazení
K zahrnutí zobrazení do sestavení použijte knihovnu Razor tříd.
Zabránění načítání prostředků
Části aplikace lze použít k tomu, aby se zabránilo načítání prostředků v určitém sestavení nebo umístění. Přidejte nebo odeberte členy Microsoft.AspNetCore.Mvc.ApplicationParts kolekce a skryjte nebo zpřístupňujte prostředky. Pořadí položek v kolekci ApplicationParts
není důležité. ApplicationPartManager
Nakonfigurujte službu před použitím ke konfiguraci služeb v kontejneru. Například nakonfigurujte ApplicationPartManager
před vyvoláním AddControllersAsServices
. Voláním Remove
ApplicationParts
kolekce odeberte prostředek.
Následující kód se používá Microsoft.AspNetCore.Mvc.ApplicationParts k odebrání MyDependentLibrary
z aplikace:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
.ConfigureApplicationPartManager(apm =>
{
var dependentLibrary = apm.ApplicationParts
.FirstOrDefault(part => part.Name == "MyDependentLibrary");
if (dependentLibrary != null)
{
apm.ApplicationParts.Remove(dependentLibrary);
}
});
}
Mezi ApplicationPartManager
tyto části patří:
- Sestavení a závislá sestavení aplikace.
Microsoft.AspNetCore.Mvc.TagHelpers
.Microsoft.AspNetCore.Mvc.Razor
.
Poskytovatelé funkcí aplikací
Poskytovatelé funkcí aplikací prověřují části aplikací a poskytují funkce pro tyto části. Existují integrovaní poskytovatelé funkcí pro následující funkce ASP.NET Core:
Poskytovatelé funkcí dědí z IApplicationFeatureProvider<TFeature>, kde T
je typ funkce. Poskytovatelé funkcí je možné implementovat pro kterýkoli z dříve uvedených typů funkcí. Pořadí poskytovatelů funkcí v běhu ApplicationPartManager.FeatureProviders
může mít vliv na chování doby běhu. Později přidaní poskytovatelé můžou reagovat na akce provedené dříve přidanými poskytovateli.
Zobrazení dostupných funkcí
Funkce dostupné pro aplikaci je možné vyčíslit vyžádáním ApplicationPartManager
injektáže závislostí:
using AppPartsSample.ViewModels;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ApplicationParts;
using Microsoft.AspNetCore.Mvc.Controllers;
using System.Linq;
using Microsoft.AspNetCore.Mvc.Razor.Compilation;
using Microsoft.AspNetCore.Mvc.Razor.TagHelpers;
using Microsoft.AspNetCore.Mvc.ViewComponents;
namespace AppPartsSample.Controllers
{
public class FeaturesController : Controller
{
private readonly ApplicationPartManager _partManager;
public FeaturesController(ApplicationPartManager partManager)
{
_partManager = partManager;
}
public IActionResult Index()
{
var viewModel = new FeaturesViewModel();
var controllerFeature = new ControllerFeature();
_partManager.PopulateFeature(controllerFeature);
viewModel.Controllers = controllerFeature.Controllers.ToList();
var tagHelperFeature = new TagHelperFeature();
_partManager.PopulateFeature(tagHelperFeature);
viewModel.TagHelpers = tagHelperFeature.TagHelpers.ToList();
var viewComponentFeature = new ViewComponentFeature();
_partManager.PopulateFeature(viewComponentFeature);
viewModel.ViewComponents = viewComponentFeature.ViewComponents.ToList();
return View(viewModel);
}
}
}
Ukázka stahování používá předchozí kód k zobrazení funkcí aplikace:
Controllers:
- FeaturesController
- HomeController
- HelloController
- GenericController`1
- GenericController`1
Tag Helpers:
- PrerenderTagHelper
- AnchorTagHelper
- CacheTagHelper
- DistributedCacheTagHelper
- EnvironmentTagHelper
- Additional Tag Helpers omitted for brevity.
View Components:
- SampleViewComponent
Zjišťování v částech aplikace
Chyby HTTP 404 nejsou neobvyklé při vývoji částí aplikace. Tyto chyby jsou obvykle způsobeny chybějícím základním požadavkem na zjištění částí aplikací. Pokud vaše aplikace vrátí chybu HTTP 404, ověřte splnění následujících požadavků:
- Nastavení
applicationName
musí být nastaveno na kořenové sestavení použité ke zjišťování. Kořenové sestavení používané ke zjišťování je obvykle sestavení vstupního bodu. - Kořenové sestavení musí mít odkaz na části používané ke zjišťování. Odkaz může být přímý nebo tranzitivní.
- Kořenové sestavení musí odkazovat na webovou sadu SDK.
- Architektura ASP.NET Core má vlastní logiku sestavení, která zapisuje atributy do kořenového sestavení, které se používají ke zjišťování.