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.ConfigureServices
yapı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 AssemblyPart
yapı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:
- ControllerFeatureProvider
- TagHelperFeatureProvider
- MetadataReferenceFeatureProvider
- ViewsFeatureProvider
internal class
RazorCompiledItemFeatureProvider
Ö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.ConfigureServices
yapı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 AssemblyPart
yapı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.
ASP.NET Core