Condividere controller, visualizzazioni, Razor pagine e altro ancora con parti dell'applicazione
Visualizzare o scaricare il codice di esempio (procedura per il download)
Una parte dell'applicazione è un'astrazione sulle risorse di un'app. Le parti dell'applicazione consentono ASP.NET Core di individuare controller, visualizzare componenti, helper tag, Razor pagine, razor origini di compilazione e altro ancora. AssemblyPart è una parte dell'applicazione. AssemblyPart
incapsula un riferimento all'assembly ed espone tipi e riferimenti alla compilazione.
I provider di funzionalità lavorano con le parti dell'applicazione per popolare le funzionalità di un'app ASP.NET Core. Il caso d'uso principale per le parti dell'applicazione consiste nel configurare un'app per individuare (o evitare il caricamento) ASP.NET funzionalità di base da un assembly. Ad esempio, è possibile condividere funzionalità comuni tra più app. Usando le parti dell'applicazione, è possibile condividere un assembly (DLL) contenente controller, visualizzazioni, pagine, Razor razor origini di compilazione, helper tag e altro ancora con più app. La condivisione di un assembly è preferibile duplicare il codice in più progetti.
ASP.NET le funzionalità di caricamento delle app di base da ApplicationPart. La AssemblyPart classe rappresenta una parte dell'applicazione supportata da un assembly.
Caricare le funzionalità di base di ASP.NET
Usare le Microsoft.AspNetCore.Mvc.ApplicationParts classi e AssemblyPart per individuare e caricare ASP.NET funzionalità di base (controller, visualizzare componenti e così via). ApplicationPartManager Tiene traccia delle parti dell'applicazione e dei provider di funzionalità disponibili. ApplicationPartManager
è configurato 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)); });
}
Il codice seguente offre un approccio alternativo alla configurazione ApplicationPartManager
tramite 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));
}
I due esempi di codice precedenti caricano da SharedController
un assembly. non SharedController
è nel progetto dell'app. Vedere il download dell'esempio di soluzione WebAppParts.
Includi visualizzazioni
Usare una libreria di Razor classi per includere le viste nell'assembly.
Impedire il caricamento delle risorse
Le parti dell'applicazione possono essere usate per evitare il caricamento di risorse in un determinato assembly o posizione. Aggiungere o rimuovere membri della Microsoft.AspNetCore.Mvc.ApplicationParts raccolta per nascondere o rendere disponibili le risorse. L'ordine delle voci nella raccolta ApplicationParts
non è importante. Configurare prima ApplicationPartManager
di usarlo per configurare i servizi nel contenitore. Ad esempio, configurare prima ApplicationPartManager
di richiamare AddControllersAsServices
. Chiamare Remove
sulla ApplicationParts
raccolta per rimuovere una risorsa.
Include ApplicationPartManager
parti per:
- Assembly e assembly dipendenti dell'app.
Microsoft.AspNetCore.Mvc.ApplicationParts.CompiledRazorAssemblyPart
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
Microsoft.AspNetCore.Mvc.TagHelpers
.Microsoft.AspNetCore.Mvc.Razor
.
Provider di funzionalità
I provider di funzionalità dell'applicazione esaminano le parti dell'applicazione e forniscono funzionalità per tali parti. Sono disponibili provider di funzionalità predefiniti per le funzionalità di base di ASP.NET seguenti:
- ControllerFeatureProvider
- TagHelperFeatureProvider
- MetadataReferenceFeatureProvider
- ViewsFeatureProvider
internal class
RazorCompiledItemFeatureProvider
I provider di funzionalità ereditano da IApplicationFeatureProvider<TFeature>, dove T
è il tipo della funzionalità. I provider di funzionalità possono essere implementati per uno dei tipi di funzionalità elencati in precedenza. L'ordine dei provider di funzionalità in ApplicationPartManager.FeatureProviders
può influire sul comportamento del runtime. I provider aggiunti successivamente possono reagire alle azioni eseguite dai provider aggiunti in precedenza.
Visualizzare funzionalità disponibili
Le funzionalità disponibili per un'app possono essere enumerate richiedendo un oggetto ApplicationPartManager
tramite l'inserimento delle dipendenze:
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);
}
}
}
L'esempio di download usa il codice precedente per visualizzare le funzionalità dell'app:
Controllers:
- FeaturesController
- HomeController
- HelloController
- GenericController`1
- GenericController`1
Tag Helpers:
- PrerenderTagHelper
- AnchorTagHelper
- CacheTagHelper
- DistributedCacheTagHelper
- EnvironmentTagHelper
- Additional Tag Helpers omitted for brevity.
View Components:
- SampleViewComponent
Individuazione nelle parti dell'applicazione
Gli errori HTTP 404 non sono insoliti quando si sviluppano con parti dell'applicazione. Questi errori sono in genere causati dalla mancanza di un requisito essenziale per il modo in cui vengono individuate le parti delle applicazioni. Se l'app restituisce un errore HTTP 404, verificare che siano stati soddisfatti i requisiti seguenti:
- L'impostazione
applicationName
deve essere impostata sull'assembly radice usato per l'individuazione. L'assembly radice usato per l'individuazione è in genere l'assembly del punto di ingresso. - L'assembly radice deve avere un riferimento alle parti usate per l'individuazione. Il riferimento può essere diretto o transitivo.
- L'assembly radice deve fare riferimento all'SDK Web. Il framework dispone di logica che contrassegna gli attributi nell'assembly radice usati per l'individuazione.
Visualizzare o scaricare il codice di esempio (procedura per il download)
Una parte dell'applicazione è un'astrazione sulle risorse di un'app. Le parti dell'applicazione consentono ASP.NET Core di individuare controller, visualizzare componenti, helper tag, Razor pagine, razor origini di compilazione e altro ancora. AssemblyPart è una parte dell'applicazione. AssemblyPart
incapsula un riferimento all'assembly ed espone tipi e riferimenti alla compilazione.
I provider di funzionalità lavorano con le parti dell'applicazione per popolare le funzionalità di un'app ASP.NET Core. Il caso d'uso principale per le parti dell'applicazione consiste nel configurare un'app per individuare (o evitare il caricamento) ASP.NET funzionalità di base da un assembly. Ad esempio, è possibile condividere funzionalità comuni tra più app. Usando le parti dell'applicazione, è possibile condividere un assembly (DLL) contenente controller, visualizzazioni, pagine, Razor razor origini di compilazione, helper tag e altro ancora con più app. La condivisione di un assembly è preferibile duplicare il codice in più progetti.
ASP.NET le funzionalità di caricamento delle app di base da ApplicationPart. La AssemblyPart classe rappresenta una parte dell'applicazione supportata da un assembly.
Caricare le funzionalità di base di ASP.NET
Usare le ApplicationPart
classi e AssemblyPart
per individuare e caricare ASP.NET funzionalità di base (controller, visualizzare componenti e così via). ApplicationPartManager Tiene traccia delle parti dell'applicazione e dei provider di funzionalità disponibili. ApplicationPartManager
è configurato 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);
}
Il codice seguente offre un approccio alternativo alla configurazione ApplicationPartManager
tramite 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);
}
I due esempi di codice precedenti caricano da SharedController
un assembly. non SharedController
è nel progetto dell'applicazione. Vedere il download dell'esempio di soluzione WebAppParts.
Includi visualizzazioni
Usare una libreria di Razor classi per includere le viste nell'assembly.
Impedire il caricamento delle risorse
Le parti dell'applicazione possono essere usate per evitare il caricamento di risorse in un determinato assembly o posizione. Aggiungere o rimuovere membri della Microsoft.AspNetCore.Mvc.ApplicationParts raccolta per nascondere o rendere disponibili le risorse. L'ordine delle voci nella raccolta ApplicationParts
non è importante. Configurare prima ApplicationPartManager
di usarlo per configurare i servizi nel contenitore. Ad esempio, configurare prima ApplicationPartManager
di richiamare AddControllersAsServices
. Chiamare Remove
sulla ApplicationParts
raccolta per rimuovere una risorsa.
Il codice seguente usa Microsoft.AspNetCore.Mvc.ApplicationParts per rimuovere MyDependentLibrary
dall'app:
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);
}
});
}
Include ApplicationPartManager
parti per:
- Assembly e assembly dipendenti dell'app.
Microsoft.AspNetCore.Mvc.TagHelpers
.Microsoft.AspNetCore.Mvc.Razor
.
Provider di funzionalità dell'applicazione
I provider di funzionalità dell'applicazione esaminano le parti dell'applicazione e forniscono funzionalità per tali parti. Sono disponibili provider di funzionalità predefiniti per le funzionalità di base di ASP.NET seguenti:
I provider di funzionalità ereditano da IApplicationFeatureProvider<TFeature>, dove T
è il tipo della funzionalità. I provider di funzionalità possono essere implementati per uno dei tipi di funzionalità elencati in precedenza. L'ordine dei provider di funzionalità in ApplicationPartManager.FeatureProviders
può influire sul comportamento del runtime. I provider aggiunti successivamente possono reagire alle azioni eseguite dai provider aggiunti in precedenza.
Visualizzare funzionalità disponibili
Le funzionalità disponibili per un'app possono essere enumerate richiedendo un oggetto ApplicationPartManager
tramite l'inserimento delle dipendenze:
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);
}
}
}
L'esempio di download usa il codice precedente per visualizzare le funzionalità dell'app:
Controllers:
- FeaturesController
- HomeController
- HelloController
- GenericController`1
- GenericController`1
Tag Helpers:
- PrerenderTagHelper
- AnchorTagHelper
- CacheTagHelper
- DistributedCacheTagHelper
- EnvironmentTagHelper
- Additional Tag Helpers omitted for brevity.
View Components:
- SampleViewComponent
Individuazione nelle parti dell'applicazione
Gli errori HTTP 404 non sono insoliti quando si sviluppano con parti dell'applicazione. Questi errori sono in genere causati dalla mancanza di un requisito essenziale per il modo in cui vengono individuate le parti delle applicazioni. Se l'app restituisce un errore HTTP 404, verificare che siano stati soddisfatti i requisiti seguenti:
- L'impostazione
applicationName
deve essere impostata sull'assembly radice usato per l'individuazione. L'assembly radice usato per l'individuazione è in genere l'assembly del punto di ingresso. - L'assembly radice deve avere un riferimento alle parti usate per l'individuazione. Il riferimento può essere diretto o transitivo.
- L'assembly radice deve fare riferimento all'SDK Web.
- Il framework ASP.NET Core ha una logica di compilazione personalizzata che contrassegna gli attributi nell'assembly radice usato per l'individuazione.