Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Door Rick Anderson
Voorbeeldcode bekijken of downloaden (hoe download je)
Een toepassingsonderdeel is een abstractie van de resources van een app. Met toepassingsonderdelen kunnen ASP.NET Core controllers detecteren, onderdelen bekijken, tag-helpers, Razor pagina's, razor-compilatiebronnen en meer.
AssemblyPart is een toepassingsonderdeel.
AssemblyPart encaspuleert een assemblyverwijzing en exposeert typen en compilatieverwijzingen.
Functieproviders werken met toepassingsonderdelen om de functies van een ASP.NET Core-app te vullen. Het belangrijkste gebruiksvoorbeeld voor toepassingsonderdelen is het configureren van een app om ASP.NET Core-functies van een assembly te detecteren (of te voorkomen). U wilt bijvoorbeeld algemene functionaliteit delen tussen meerdere apps. Met behulp van toepassingsonderdelen kunt u een assembly (DLL) met controllers, weergaven, Razor pagina's, razor-compilatiebronnen, Tag Helpers en meer delen met meerdere apps. Het delen van een assembly heeft de voorkeur boven het dupliceren van code in meerdere projecten.
ASP.NET Core-apps laden functies van ApplicationPart. De AssemblyPart klasse vertegenwoordigt een toepassingsonderdeel dat wordt ondersteund door een assembly.
ASP.NET Core-functies laden
Gebruik de Microsoft.AspNetCore.Mvc.ApplicationParts en AssemblyPart klassen om ASP.NET Kernfuncties (controllers, onderdelen weergeven, enzovoort) te detecteren en te laden. De ApplicationPartManager houdt de toepassingsonderdelen en functieleveranciers bij die beschikbaar zijn.
ApplicationPartManager wordt geconfigureerd in 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)); });
}
De volgende code biedt een alternatieve benadering voor het ApplicationPartManager configureren met behulp van 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));
}
De voorgaande twee codevoorbeelden laden de SharedController uit een assembly. De SharedController bevindt zich niet in het project van de app. Zie het voorbeeld van de webAppParts-oplossing downloaden.
Weergaven opnemen
Gebruik een Razor class library om weergaven in de assembly te integreren.
Voorkomen dat resources worden geladen
Toepassingsonderdelen kunnen worden gebruikt om het laden van hulpbronnen in een bepaalde assembly of locatie te voorkomen. Leden van de Microsoft.AspNetCore.Mvc.ApplicationParts verzameling toevoegen of verwijderen om beschikbare resources te verbergen of beschikbaar te maken. De volgorde van de items in de ApplicationParts verzameling is niet belangrijk. Configureer de ApplicationPartManager voordat u deze gebruikt om services in de container te configureren. Configureer bijvoorbeeld het ApplicationPartManager voordat u aanroept AddControllersAsServices. Roep Remove de ApplicationParts verzameling aan om een resource te verwijderen.
De ApplicationPartManager bevat onderdelen voor:
- De assemblies en afhankelijke assemblies van de app.
Microsoft.AspNetCore.Mvc.ApplicationParts.CompiledRazorAssemblyPartMicrosoft.AspNetCore.Mvc.Razor.RuntimeCompilation-
Microsoft.AspNetCore.Mvc.TagHelpers. -
Microsoft.AspNetCore.Mvc.Razor.
Functie-aanbieders
Toepassingsfunctieproviders onderzoeken toepassingsonderdelen en bieden functies voor deze onderdelen. Er zijn ingebouwde functieproviders voor de volgende ASP.NET Kernfuncties:
- ControllerFeatureProvider
- TagHelperFeatureProvider
- MetadataReferenceFeatureProvider
- ViewsFeatureProvider
-
internal classRazorCompiledItemFeatureProvider
Functieproviders nemen over van IApplicationFeatureProvider<TFeature>, waar T is het type van de functie. Functieproviders kunnen worden geïmplementeerd voor een van de eerder vermelde functietypen. De volgorde van functieproviders in ApplicationPartManager.FeatureProviders kan van invloed zijn op het gedrag tijdens de uitvoeringstijd. Later toegevoegde providers kunnen reageren op acties die zijn uitgevoerd door eerder toegevoegde providers.
Beschikbare functies weergeven
De functies die beschikbaar zijn voor een app kunnen worden geïnventariseerd door een ApplicationPartManager aanvraag via afhankelijkheidsinjectie aan te vragen:
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);
}
}
}
In het downloadvoorbeeld wordt de voorgaande code gebruikt om de app-functies weer te geven:
Controllers:
- FeaturesController
- HomeController
- HelloController
- GenericController`1
- GenericController`1
Tag Helpers:
- PrerenderTagHelper
- AnchorTagHelper
- CacheTagHelper
- DistributedCacheTagHelper
- EnvironmentTagHelper
- Additional Tag Helpers omitted for brevity.
View Components:
- SampleViewComponent
Ontdekking in onderdelen van toepassingen
HTTP 404-fouten zijn niet ongebruikelijk bij het ontwikkelen met toepassingsonderdelen. Deze fouten worden meestal veroorzaakt doordat er een essentiële vereiste ontbreekt voor de wijze waarop onderdelen van toepassingen worden gedetecteerd. Als uw app een HTTP 404-fout retourneert, controleert u of aan de volgende vereisten is voldaan:
- De
applicationNameinstelling moet worden ingesteld op de hoofdassembly die wordt gebruikt voor detectie. De basisassembly die wordt gebruikt voor detectie is normaal de assemblage van het invoerpunt. - De root-assembly moet verwijzen naar de onderdelen die voor het ontdekken worden gebruikt. De verwijzing kan direct of transitief zijn.
- De hoofdassembly moet verwijzen naar de Web SDK. Het framework heeft logica waarmee kenmerken worden gestempeld in de hoofdassembly die worden gebruikt voor detectie.
Door Rick Anderson
Voorbeeldcode bekijken of downloaden (hoe download je)
Een toepassingsonderdeel is een abstractie van de resources van een app. Met toepassingsonderdelen kunnen ASP.NET Core controllers detecteren, onderdelen bekijken, tag-helpers, Razor pagina's, razor-compilatiebronnen en meer.
AssemblyPart is een toepassingsonderdeel.
AssemblyPart encaspuleert een assemblyverwijzing en exposeert typen en compilatieverwijzingen.
Functieproviders werken met toepassingsonderdelen om de functies van een ASP.NET Core-app te vullen. Het belangrijkste gebruiksvoorbeeld voor toepassingsonderdelen is het configureren van een app om ASP.NET Core-functies van een assembly te detecteren (of te voorkomen). U wilt bijvoorbeeld algemene functionaliteit delen tussen meerdere apps. Met behulp van toepassingsonderdelen kunt u een assembly (DLL) met controllers, weergaven, Razor pagina's, razor-compilatiebronnen, Tag Helpers en meer delen met meerdere apps. Het delen van een assembly heeft de voorkeur boven het dupliceren van code in meerdere projecten.
ASP.NET Core-apps laden functies van ApplicationPart. De AssemblyPart klasse vertegenwoordigt een toepassingsonderdeel dat wordt ondersteund door een assembly.
ASP.NET Core-functies laden
Gebruik de ApplicationPart en AssemblyPart klassen om ASP.NET Kernfuncties (controllers, onderdelen weergeven, enzovoort) te detecteren en te laden. De ApplicationPartManager houdt de toepassingsonderdelen en functieleveranciers bij die beschikbaar zijn.
ApplicationPartManager wordt geconfigureerd in 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);
}
De volgende code biedt een alternatieve benadering voor het ApplicationPartManager configureren met behulp van 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);
}
De voorgaande twee codevoorbeelden laden de SharedController uit een assembly. De SharedController bevindt zich niet in het project van de toepassing. Zie het voorbeeld van de webAppParts-oplossing downloaden.
Weergaven opnemen
Gebruik een Razor class library om weergaven in de assembly te integreren.
Voorkomen dat resources worden geladen
Toepassingsonderdelen kunnen worden gebruikt om het laden van hulpbronnen in een bepaalde assembly of locatie te voorkomen. Leden van de Microsoft.AspNetCore.Mvc.ApplicationParts verzameling toevoegen of verwijderen om beschikbare resources te verbergen of beschikbaar te maken. De volgorde van de items in de ApplicationParts verzameling is niet belangrijk. Configureer de ApplicationPartManager voordat u deze gebruikt om services in de container te configureren. Configureer bijvoorbeeld het ApplicationPartManager voordat u aanroept AddControllersAsServices. Roep Remove de ApplicationParts verzameling aan om een resource te verwijderen.
De volgende code gebruikt Microsoft.AspNetCore.Mvc.ApplicationParts om uit de app te verwijderen MyDependentLibrary :
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);
}
});
}
De ApplicationPartManager bevat onderdelen voor:
- De assemblies en afhankelijke assemblies van de app.
-
Microsoft.AspNetCore.Mvc.TagHelpers. -
Microsoft.AspNetCore.Mvc.Razor.
Aanbieders van toepassingsfuncties
Toepassingsfunctieproviders onderzoeken toepassingsonderdelen en bieden functies voor deze onderdelen. Er zijn ingebouwde functieproviders voor de volgende ASP.NET Kernfuncties:
Functieproviders nemen over van IApplicationFeatureProvider<TFeature>, waar T is het type van de functie. Functieproviders kunnen worden geïmplementeerd voor een van de eerder vermelde functietypen. De volgorde van functieproviders in ApplicationPartManager.FeatureProviders kan van invloed zijn op het gedrag tijdens de uitvoeringstijd. Later toegevoegde providers kunnen reageren op acties die zijn uitgevoerd door eerder toegevoegde providers.
Beschikbare functies weergeven
De functies die beschikbaar zijn voor een app kunnen worden geïnventariseerd door een ApplicationPartManager aanvraag via afhankelijkheidsinjectie aan te vragen:
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);
}
}
}
In het downloadvoorbeeld wordt de voorgaande code gebruikt om de app-functies weer te geven:
Controllers:
- FeaturesController
- HomeController
- HelloController
- GenericController`1
- GenericController`1
Tag Helpers:
- PrerenderTagHelper
- AnchorTagHelper
- CacheTagHelper
- DistributedCacheTagHelper
- EnvironmentTagHelper
- Additional Tag Helpers omitted for brevity.
View Components:
- SampleViewComponent
Ontdekking in onderdelen van toepassingen
HTTP 404-fouten zijn niet ongebruikelijk bij het ontwikkelen met toepassingsonderdelen. Deze fouten worden meestal veroorzaakt doordat er een essentiële vereiste ontbreekt voor de wijze waarop onderdelen van toepassingen worden gedetecteerd. Als uw app een HTTP 404-fout retourneert, controleert u of aan de volgende vereisten is voldaan:
- De
applicationNameinstelling moet worden ingesteld op de hoofdassembly die wordt gebruikt voor detectie. De basisassembly die wordt gebruikt voor detectie is normaal de assemblage van het invoerpunt. - De root-assembly moet verwijzen naar de onderdelen die voor het ontdekken worden gebruikt. De verwijzing kan direct of transitief zijn.
- De hoofdassembly moet verwijzen naar de Web SDK.
- Het ASP.NET Core-framework heeft aangepaste buildlogica waarmee kenmerken in de hoofdassembly worden gestempeld die worden gebruikt voor detectie.