Aracılığıyla paylaş


Uygulama Bölümleri ile denetleyicileri, görünümleri, Razor Sayfaları ve daha fazlasını paylaşma

Gönderen Rick Anderson

Örnek kodu görüntüleme veya indirme (indirme)

Uygulama Bölümü, bir uygulamanın kaynakları üzerindeki soyutlamadır. Uygulama Bölümleri, ASP.NET Core'un denetleyicileri bulmasına, bileşenleri görüntülemesine, yardımcıları etiketlemesine, Razor Sayfalar'a, razor derleme kaynaklarına ve daha fazlasına olanak sağlar. AssemblyPart bir Uygulama bölümüdür. AssemblyPart derleme başvurularını kapsüller ve türleri ve derleme başvurularını kullanıma sunar.

Özellik sağlayıcıları , bir ASP.NET Core uygulamasının özelliklerini doldurmak için uygulama bölümleriyle çalışır. Uygulama bölümlerinin ana kullanım örneği, bir derlemeden ASP.NET Core özelliklerini bulmak (veya yüklemekten kaçınmak) için bir uygulama yapılandırmaktır. Örneğin, birden çok uygulama arasında ortak işlevleri paylaşmak isteyebilirsiniz. Uygulama Bölümleri'ni kullanarak denetleyiciler, görünümler Razor , Sayfalar, derleme kaynakları, razor Etiket Yardımcıları ve daha fazlasını içeren bir derlemeyi (DLL) birden çok uygulamayla paylaşabilirsiniz. Birden çok projede kod çoğaltmak için bir derlemenin paylaşılması tercih edilir.

ASP.NET Core uygulamaları özelliklerinden ApplicationPartözellik yükler. sınıfı, AssemblyPart bir derleme tarafından yedeklenen bir uygulama bölümünü temsil eder.

ASP.NET Core özelliklerini yükleme

Microsoft.AspNetCore.Mvc.ApplicationParts ASP.NET Temel özelliklerini (denetleyiciler, görünüm bileşenleri vb.) bulmak ve yüklemek için ve AssemblyPart sınıflarını kullanın. , ApplicationPartManager kullanılabilir uygulama parçalarını ve özellik sağlayıcılarını izler. ApplicationPartManager içinde Startup.ConfigureServicesyapılandırılır:

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

Aşağıdaki kod kullanarak AssemblyPartyapılandırmaya ApplicationPartManager alternatif bir yaklaşım sağlar:

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

Yukarıdaki iki kod örneği bir derlemeden öğesini SharedController yükler. SharedController, uygulamanın projesinde değil. Bkz. WebAppParts çözüm örneği indirme.

Görünümleri dahil et

Derlemeye görünümler eklemek için bir Razor sınıf kitaplığı kullanın.

Kaynakların yüklenmesini engelleme

Uygulama bölümleri, belirli bir derlemedeki veya konumdaki kaynakların yüklenmesini önlemek için kullanılabilir. Kaynakları gizlemek veya kullanılabilir hale getirmek için koleksiyonun Microsoft.AspNetCore.Mvc.ApplicationParts üyelerini ekleyin veya kaldırın. Koleksiyondaki ApplicationParts girdilerin sırası önemli değildir. Kapsayıcıdaki hizmetleri yapılandırmak için kullanmadan önce öğesini ApplicationPartManager yapılandırın. Örneğin, çağırmadan AddControllersAsServicesönce öğesini ApplicationPartManager yapılandırın. Bir kaynağı kaldırmak için koleksiyonda ApplicationParts çağrısında Remove bulunur.

şunların ApplicationPartManager parçalarını içerir:

  • Uygulamanın derlemesi ve bağımlı derlemeleri.
  • Microsoft.AspNetCore.Mvc.ApplicationParts.CompiledRazorAssemblyPart
  • Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
  • Microsoft.AspNetCore.Mvc.TagHelpers.
  • Microsoft.AspNetCore.Mvc.Razor.

Özellik sağlayıcıları

Uygulama özelliği sağlayıcıları uygulama parçalarını inceler ve bu parçalar için özellikler sağlar. Aşağıdaki ASP.NET Core özellikleri için yerleşik özellik sağlayıcıları vardır:

Özellik sağlayıcıları, özelliğin türü olan T öğesinden IApplicationFeatureProvider<TFeature>devralır. Özellik sağlayıcıları, daha önce listelenen özellik türlerinden herhangi biri için uygulanabilir. içindeki özellik sağlayıcılarının ApplicationPartManager.FeatureProviders sırası çalışma zamanı davranışını etkileyebilir. Daha sonra eklenen sağlayıcılar, daha önce eklenen sağlayıcılar tarafından yapılan eylemlere tepki verebilir.

Kullanılabilir özellikleri görüntüleme

Bir uygulamanın kullanabileceği özellikler, bağımlılık ekleme yoluyla istenerek ApplicationPartManager numaralandırılabilir:

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

İndirme örneği , uygulama özelliklerini görüntülemek için önceki kodu kullanır:

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

Uygulama bölümlerinde bulma

Uygulama bölümleriyle geliştirme sırasında HTTP 404 hataları sık karşılaşılan bir durum değildir. Bu hatalar genellikle uygulama parçalarının nasıl bulunduğuna ilişkin temel bir gereksinimin eksik olmaması nedeniyle oluşur. Uygulamanız http 404 hatası döndürüyorsa aşağıdaki gereksinimlerin karşılandığını doğrulayın:

  • Ayarın applicationName bulma için kullanılan kök derlemeye ayarlanması gerekir. Bulma için kullanılan kök derleme normalde giriş noktası derlemesidir.
  • Kök derlemenin bulma için kullanılan bölümlere bir başvurusu olması gerekir. Başvuru doğrudan veya geçişli olabilir.
  • Kök derlemenin Web SDK'sına başvurması gerekir. Çerçeve, öznitelikleri bulma için kullanılan kök derlemeye damgalayan bir mantığa sahiptir.

Gönderen Rick Anderson

Örnek kodu görüntüleme veya indirme (indirme)

Uygulama Bölümü, bir uygulamanın kaynakları üzerindeki soyutlamadır. Uygulama Bölümleri, ASP.NET Core'un denetleyicileri bulmasına, bileşenleri görüntülemesine, yardımcıları etiketlemesine, Razor Sayfalar'a, razor derleme kaynaklarına ve daha fazlasına olanak sağlar. AssemblyPart bir Uygulama bölümüdür. AssemblyPart derleme başvurularını kapsüller ve türleri ve derleme başvurularını kullanıma sunar.

Özellik sağlayıcıları , bir ASP.NET Core uygulamasının özelliklerini doldurmak için uygulama bölümleriyle çalışır. Uygulama bölümlerinin ana kullanım örneği, bir derlemeden ASP.NET Core özelliklerini bulmak (veya yüklemekten kaçınmak) için bir uygulama yapılandırmaktır. Örneğin, birden çok uygulama arasında ortak işlevleri paylaşmak isteyebilirsiniz. Uygulama Bölümleri'ni kullanarak denetleyiciler, görünümler Razor , Sayfalar, derleme kaynakları, razor Etiket Yardımcıları ve daha fazlasını içeren bir derlemeyi (DLL) birden çok uygulamayla paylaşabilirsiniz. Birden çok projede kod çoğaltmak için bir derlemenin paylaşılması tercih edilir.

ASP.NET Core uygulamaları özelliklerinden ApplicationPartözellik yükler. sınıfı, AssemblyPart bir derleme tarafından yedeklenen bir uygulama bölümünü temsil eder.

ASP.NET Core özelliklerini yükleme

ApplicationPart ASP.NET Temel özelliklerini (denetleyiciler, görünüm bileşenleri vb.) bulmak ve yüklemek için ve AssemblyPart sınıflarını kullanın. , ApplicationPartManager kullanılabilir uygulama parçalarını ve özellik sağlayıcılarını izler. ApplicationPartManager içinde Startup.ConfigureServicesyapılandırılır:

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

Aşağıdaki kod kullanarak AssemblyPartyapılandırmaya ApplicationPartManager alternatif bir yaklaşım sağlar:

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

Yukarıdaki iki kod örneği bir derlemeden öğesini SharedController yükler. SharedController, uygulamanın projesinde değil. Bkz. WebAppParts çözüm örneği indirme.

Görünümleri dahil et

Derlemeye görünümler eklemek için bir Razor sınıf kitaplığı kullanın.

Kaynakların yüklenmesini engelleme

Uygulama bölümleri, belirli bir derlemedeki veya konumdaki kaynakların yüklenmesini önlemek için kullanılabilir. Kaynakları gizlemek veya kullanılabilir hale getirmek için koleksiyonun Microsoft.AspNetCore.Mvc.ApplicationParts üyelerini ekleyin veya kaldırın. Koleksiyondaki ApplicationParts girdilerin sırası önemli değildir. Kapsayıcıdaki hizmetleri yapılandırmak için kullanmadan önce öğesini ApplicationPartManager yapılandırın. Örneğin, çağırmadan AddControllersAsServicesönce öğesini ApplicationPartManager yapılandırın. Bir kaynağı kaldırmak için koleksiyonda ApplicationParts çağrısında Remove bulunur.

Aşağıdaki kod, uygulamadan kaldırmak MyDependentLibrary için kullanırMicrosoft.AspNetCore.Mvc.ApplicationParts:

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

şunların ApplicationPartManager parçalarını içerir:

  • Uygulamanın derlemesi ve bağımlı derlemeleri.
  • Microsoft.AspNetCore.Mvc.TagHelpers.
  • Microsoft.AspNetCore.Mvc.Razor.

Uygulama özelliği sağlayıcıları

Uygulama özelliği sağlayıcıları uygulama parçalarını inceler ve bu parçalar için özellikler sağlar. Aşağıdaki ASP.NET Core özellikleri için yerleşik özellik sağlayıcıları vardır:

Özellik sağlayıcıları, özelliğin türü olan T öğesinden IApplicationFeatureProvider<TFeature>devralır. Özellik sağlayıcıları, daha önce listelenen özellik türlerinden herhangi biri için uygulanabilir. içindeki özellik sağlayıcılarının ApplicationPartManager.FeatureProviders sırası çalışma zamanı davranışını etkileyebilir. Daha sonra eklenen sağlayıcılar, daha önce eklenen sağlayıcılar tarafından yapılan eylemlere tepki verebilir.

Kullanılabilir özellikleri görüntüleme

Bir uygulamanın kullanabileceği özellikler, bağımlılık ekleme yoluyla istenerek ApplicationPartManager numaralandırılabilir:

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

İndirme örneği , uygulama özelliklerini görüntülemek için önceki kodu kullanır:

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

Uygulama bölümlerinde bulma

Uygulama bölümleriyle geliştirme sırasında HTTP 404 hataları sık karşılaşılan bir durum değildir. Bu hatalar genellikle uygulama parçalarının nasıl bulunduğuna ilişkin temel bir gereksinimin eksik olmaması nedeniyle oluşur. Uygulamanız http 404 hatası döndürüyorsa aşağıdaki gereksinimlerin karşılandığını doğrulayın:

  • Ayarın applicationName bulma için kullanılan kök derlemeye ayarlanması gerekir. Bulma için kullanılan kök derleme normalde giriş noktası derlemesidir.
  • Kök derlemenin bulma için kullanılan bölümlere bir başvurusu olması gerekir. Başvuru doğrudan veya geçişli olabilir.
  • Kök derlemenin Web SDK'sına başvurması gerekir.
    • ASP.NET Core çerçevesi, öznitelikleri bulma için kullanılan kök derlemeye damgalayan özel derleme mantığına sahiptir.