Megosztás a következőn keresztül:


Vezérlők, nézetek, Razor lapok és egyebek megosztása az alkalmazásrészekkel

Készítette: Rick Anderson

Mintakód megtekintése vagy letöltése (hogyan lehet letölteni)

Az alkalmazásrész egy alkalmazás erőforrásainak absztrakciója. Az alkalmazásrészek lehetővé teszik, hogy az ASP.NET Core felderítse a vezérlőket, a nézetösszetevőket, a címkesegítőket, a Razor oldalakat, a Razor fordítási forrásokat és más elemeket. AssemblyPart egy alkalmazásrész. AssemblyPart beágyaz egy összeállítási hivatkozást, és kiteszi a típusokat és fordítási referenciákat.

Funkciószolgáltatók alkalmazásrészekkel töltik fel egy ASP.NET Core alkalmazás funkcióit. Az alkalmazásrészek fő felhasználási esete, hogy egy alkalmazás konfigurálja, hogy felderítse (vagy elkerülje a betöltést) ASP.NET Core-funkciókat egy szerelvényből. Előfordulhat például, hogy közös funkciókat szeretne megosztani több alkalmazás között. Az alkalmazásrészek használatával több alkalmazással megoszthat egy Assembly-t (DLL-t), amely vezérlőket, nézeteket, Razor oldalakat, Razor fordítási forrásokat, címkesegítőket és egyebeket tartalmaz. A szerelvény megosztását előnyben részesíti a kód több projektben történő duplikálása.

ASP.NET Core-alkalmazások betöltik a ApplicationPartfunkciókat. A AssemblyPart osztály egy szerelvény által biztosított alkalmazáskomponenst jelöl.

ASP.NET Core-funkciók betöltése

A Microsoft.AspNetCore.Mvc.ApplicationParts és AssemblyPart osztályokkal felderítheti és betöltheti ASP.NET Core-funkciókat (vezérlők, összetevők megtekintése stb.). A ApplicationPartManager nyomon követi az elérhető alkalmazásrészeket és szolgáltatásszolgáltatókat. ApplicationPartManager a Startup.ConfigureServices-ben van konfigurálva:

// 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)); });
}

Az alábbi kód alternatív módszert kínál a ApplicationPartManagerAssemblyParthasználatával történő konfigurálásához:

// 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));
}

Az előző két kódrészlet betölti a SharedController-t egy assemblyből. A SharedController nincs az alkalmazás projektjében. Tekintse meg a WebAppParts-megoldást mintaletöltést.

Nézetek belefoglalása

Egy Razor osztálytár használatával vegye fel a nézeteket a szerelvénybe.

Erőforrások betöltésének megakadályozása

Az alkalmazásrészek segítségével elkerülheti, erőforrások betöltése egy adott szerelvénybe vagy helyre. A Microsoft.AspNetCore.Mvc.ApplicationParts-gyűjtemény tagjainak hozzáadása vagy eltávolítása az erőforrások elrejtéséhez vagy elérhetővé tétele érdekében. A ApplicationParts gyűjtemény bejegyzéseinek sorrendje nem fontos. A ApplicationPartManager-t konfigurálja a tárolóban lévő szolgáltatások konfigurálása előtt. Konfigurálja például a ApplicationPartManager a AddControllersAsServicesmeghívása előtt. Erőforrás eltávolításához a Remove gyűjteményből hívja meg a ApplicationParts számot.

A ApplicationPartManager a következő alkatrészeket tartalmazza:

  • Az alkalmazás szerelvénye és a függő szerelvények.
  • Microsoft.AspNetCore.Mvc.ApplicationParts.CompiledRazorAssemblyPart
  • Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
  • Microsoft.AspNetCore.Mvc.TagHelpers.
  • Microsoft.AspNetCore.Mvc.Razor.

Szolgáltatásszolgáltatók

Az alkalmazásfunkció-szolgáltatók megvizsgálják az alkalmazásrészeket, és szolgáltatásokat nyújtanak ezekhez a részekhez. Az alábbi ASP.NET Core-funkciókhoz beépített szolgáltatásszolgáltatók tartoznak:

A szolgáltatók a IApplicationFeatureProvider<TFeature>-t öröklik, ahol T a funkció típusa. A szolgáltatásszolgáltatók bármelyik korábban felsorolt funkciótípushoz implementálhatók. A ApplicationPartManager.FeatureProviders szolgáltatásszolgáltatók sorrendje befolyásolhatja a futási idő viselkedését. A későbbi hozzáadott szolgáltatók reagálhatnak a korábban hozzáadott szolgáltatók által végrehajtott műveletekre.

Elérhető funkciók megjelenítése

Egy alkalmazás számára elérhető funkciók felsorolhatók, ha egy -t kérünk afüggőséginjektáláson keresztül :

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);
        }
    }
}

A letöltési minta az előző kóddal jeleníti meg az alkalmazás funkcióit:

Controllers:
    - FeaturesController
    - HomeController
    - HelloController
    - GenericController`1
    - GenericController`1
Tag Helpers:
    - PrerenderTagHelper
    - AnchorTagHelper
    - CacheTagHelper
    - DistributedCacheTagHelper
    - EnvironmentTagHelper
    - Additional Tag Helpers omitted for brevity.
View Components:
    - SampleViewComponent

Felderítés az alkalmazásrészekben

A HTTP 404-hibák nem ritkák az alkalmazásrészek fejlesztésekor. Ezeket a hibákat általában az okozza, hogy hiányzik egy alapvető követelmény az alkalmazások részeinek felderítéséhez. Ha az alkalmazás HTTP 404-hibát ad vissza, ellenőrizze, hogy teljesültek-e a következő követelmények:

  • A applicationName beállítást a felderítéshez használt gyökérszerelvényre kell beállítani. A felderítéshez használt gyökérszerelvény normál esetben a belépési pont szerelvénye.
  • A gyökérszerelvénynek hivatkoznia kell a felderítéshez használt részekre. A hivatkozás lehet közvetlen vagy tranzitív.
  • A gyökérszerelvénynek hivatkoznia kell a webes SDK-ra. A keretrendszer logikája attribútumokat bélyegez a felderítéshez használt gyökérszerelvénybe.

Készítette: Rick Anderson

Mintakód megtekintése vagy letöltése (hogyan lehet letölteni)

Az alkalmazásrész egy alkalmazás erőforrásainak absztrakciója. Az alkalmazásrészek lehetővé teszik, hogy az ASP.NET Core felderítse a vezérlőket, a nézetösszetevőket, a címkesegítőket, a Razor oldalakat, a Razor fordítási forrásokat és más elemeket. AssemblyPart egy alkalmazásrész. AssemblyPart beágyaz egy összeállítási hivatkozást, és kiteszi a típusokat és fordítási referenciákat.

Funkciószolgáltatók alkalmazásrészekkel töltik fel egy ASP.NET Core alkalmazás funkcióit. Az alkalmazásrészek fő felhasználási esete, hogy egy alkalmazás konfigurálja, hogy felderítse (vagy elkerülje a betöltést) ASP.NET Core-funkciókat egy szerelvényből. Előfordulhat például, hogy közös funkciókat szeretne megosztani több alkalmazás között. Az alkalmazásrészek használatával több alkalmazással megoszthat egy Assembly-t (DLL-t), amely vezérlőket, nézeteket, Razor oldalakat, Razor fordítási forrásokat, címkesegítőket és egyebeket tartalmaz. A szerelvény megosztását előnyben részesíti a kód több projektben történő duplikálása.

ASP.NET Core-alkalmazások betöltik a ApplicationPartfunkciókat. A AssemblyPart osztály egy szerelvény által biztosított alkalmazáskomponenst jelöl.

ASP.NET Core-funkciók betöltése

A ApplicationPart és AssemblyPart osztályokkal felderítheti és betöltheti ASP.NET Core-funkciókat (vezérlők, összetevők megtekintése stb.). A ApplicationPartManager nyomon követi az elérhető alkalmazásrészeket és szolgáltatásszolgáltatókat. ApplicationPartManager a Startup.ConfigureServices-ben van konfigurálva:

public void ConfigureServices(IServiceCollection services)
{
    // Requires using System.Reflection;
    var assembly = typeof(MySharedController).GetTypeInfo().Assembly;
    services.AddMvc()
        .AddApplicationPart(assembly)
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

Az alábbi kód alternatív módszert kínál a ApplicationPartManagerAssemblyParthasználatával történő konfigurálásához:

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);
}

Az előző két kódrészlet betölti a SharedController-t egy assemblyből. A SharedController nincs az alkalmazás projektjében. Tekintse meg a WebAppParts-megoldást mintaletöltést.

Nézetek belefoglalása

Egy Razor osztálytár használatával vegye fel a nézeteket a szerelvénybe.

Erőforrások betöltésének megakadályozása

Az alkalmazásrészek segítségével elkerülheti, erőforrások betöltése egy adott szerelvénybe vagy helyre. A Microsoft.AspNetCore.Mvc.ApplicationParts-gyűjtemény tagjainak hozzáadása vagy eltávolítása az erőforrások elrejtéséhez vagy elérhetővé tétele érdekében. A ApplicationParts gyűjtemény bejegyzéseinek sorrendje nem fontos. A ApplicationPartManager-t konfigurálja a tárolóban lévő szolgáltatások konfigurálása előtt. Konfigurálja például a ApplicationPartManager a AddControllersAsServicesmeghívása előtt. Erőforrás eltávolításához a Remove gyűjteményből hívja meg a ApplicationParts számot.

Az alábbi kód Microsoft.AspNetCore.Mvc.ApplicationParts használatával távolít el MyDependentLibrary az alkalmazásból:

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);
                }
            });
}

A ApplicationPartManager a következő alkatrészeket tartalmazza:

  • Az alkalmazás szerelvénye és a függő szerelvények.
  • Microsoft.AspNetCore.Mvc.TagHelpers.
  • Microsoft.AspNetCore.Mvc.Razor.

Alkalmazásfunkció-szolgáltatók

Az alkalmazásfunkció-szolgáltatók megvizsgálják az alkalmazásrészeket, és szolgáltatásokat nyújtanak ezekhez a részekhez. Az alábbi ASP.NET Core-funkciókhoz beépített szolgáltatásszolgáltatók tartoznak:

A szolgáltatók a IApplicationFeatureProvider<TFeature>-t öröklik, ahol T a funkció típusa. A szolgáltatásszolgáltatók bármelyik korábban felsorolt funkciótípushoz implementálhatók. A ApplicationPartManager.FeatureProviders szolgáltatásszolgáltatók sorrendje befolyásolhatja a futási idő viselkedését. A későbbi hozzáadott szolgáltatók reagálhatnak a korábban hozzáadott szolgáltatók által végrehajtott műveletekre.

Elérhető funkciók megjelenítése

Egy alkalmazás számára elérhető funkciók felsorolhatók, ha egy -t kérünk afüggőséginjektáláson keresztül :

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);
        }
    }
}

A letöltési minta az előző kóddal jeleníti meg az alkalmazás funkcióit:

Controllers:
    - FeaturesController
    - HomeController
    - HelloController
    - GenericController`1
    - GenericController`1
Tag Helpers:
    - PrerenderTagHelper
    - AnchorTagHelper
    - CacheTagHelper
    - DistributedCacheTagHelper
    - EnvironmentTagHelper
    - Additional Tag Helpers omitted for brevity.
View Components:
    - SampleViewComponent

Felderítés az alkalmazásrészekben

A HTTP 404-hibák nem ritkák az alkalmazásrészek fejlesztésekor. Ezeket a hibákat általában az okozza, hogy hiányzik egy alapvető követelmény az alkalmazások részeinek felderítéséhez. Ha az alkalmazás HTTP 404-hibát ad vissza, ellenőrizze, hogy teljesültek-e a következő követelmények:

  • A applicationName beállítást a felderítéshez használt gyökérszerelvényre kell beállítani. A felderítéshez használt gyökérszerelvény normál esetben a belépési pont szerelvénye.
  • A gyökérszerelvénynek hivatkoznia kell a felderítéshez használt részekre. A hivatkozás lehet közvetlen vagy tranzitív.
  • A gyökérszerelvénynek hivatkoznia kell a webes SDK-ra.
    • A ASP.NET Core-keretrendszer egyéni buildlogikával rendelkezik, amely attribútumokat bélyegez a felderítéshez használt gyökérszerelvénybe.