使用ApplicationPart動的ローディングコントローラとビュー - ゼロからASP.NETコアMVCは(A)中のプラグインの開発を達成するために

オリジナル: -利用ApplicationPartダイナミックローディングコントローラとビュースクラッチは、プラグイン(A)のASP.NET MVCのコアの開発を達成するために

タイトル:プラグインスクラッチからのASP.NETコアMVCの開発を達成するために() -使用するアプリケーションパート動的負荷コントローラとビュー
の:Lamond呂
住所:HTTPS://www.cnblogs.com/lwqlun/p/11137788。 HTML
ソース:https://github.com/lamondlu/Mystique

はじめに

あなたには、いくつかのオープンソースCMSを使用したことがあれば、確かにプラグイン機能は、ユーザーが動的プラグインの道のパッケージを可能にすることによって、いくつかの機能を追加したり、アップロードすることができ、それにプラグインASP.NETコアMVCの開発を達成するための方法をここで使用されます、のは、それを見てみましょう。

このシリーズは、単に著者の試みのいくつかは、必ずしも正しい、ただいくつかのアイデアを共有するために、我々はフォローアップ何を常時更新されます話し合うことができるという意味ではありません。

ApplicationPartは何ですか?

ASP.NETコアで開発され、その後、プラグイン、私が言わなければなりませんApplicationPartApplicationPartASP.NETコアは、それがコントローラによって求めることができる抽象アプリケーションリソースは、中に含まれる、重要な構成要素であるアセンブリビューコンポーネント、TagHelper及びプリコンパイルMVCかみそりビュー及び他の特徴。

ASP.NET MVCのコアアプリケーションの起動時に、あなたは決して直接参照されるアセンブリおよび負荷コントローラ、プリコンパイルをしたい場合は、デフォルトで、それは、現在のアプリケーションのプロジェクトを開始プロジェクトと参照でコントロールをロードしようカミソリビューでは、我々はの助けが必要ですApplicationPart

ASP.NET MVCのコアは、そこにあるApplicaitonPartManagerことにより、クラスは、ApplicationPartManager私たちの現在のアプリケーションは、どれを使用するように設定することができますApplicationPart

例:

 
 
コピー
var assembly = Assembly.LoadFile("demo.dll"); var assemblyPart = new AssemblyPart(assembly); var mvcBuilders = services.AddMvc(); mvcBuilders.ConfigureApplicationPartManager(apm => { apm.ApplicationParts.Add(assemblyPart); });

その下に、我々は、最も単純な例の一つを通過し、我々はヘルプをどのようにお見せApplicationPart、動的負荷サードパーティ製のプログラムは、コントローラとプリコンパイルされたビューを集中。

プロジェクトの作成#を

まず、DynamicPluginsDemoSiteという名前のASP.NET MVCのコアサイトを、作成します

その後、我々はまた、DemoPlugin1という名前の.NETコアクラスライブラリプロジェクトを作成するプロジェクトへの参照中

  • Microsoft.AspNetCore.App
  • Microsoft.AspNetCore.Razor
  • Microsoft.AspNetCore.Razor.Design

注:以上の3つのアセンブリの場合、それは同じバージョンDynamicPluginsDemoSiteとDemoPluigin1利用を確保する必要があります。

ここでは、プリコンパイルカミソリビューを確保するために、我々はプロジェクトファイルDemoPlugin1.csproj DemoPlugin1プロジェクトを開く必要があります。このプロジェクトは、「Microsoft.Net.Sdk.Razor」に変更「Microsoft.NET.Sdk」からSDKを使用しています。

 
 
コピー
<Project Sdk="Microsoft.NET.Sdk.Razor"> <PropertyGroup> <TargetFramework>netcoreapp2.2</TargetFramework> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <OutputPath>C:\Users\Lamond Lu\source\repos\DynamicPlugins\DynamicPluginsDemoSite\bin\Debug</OutputPath> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.App" Version="2.2.0" /> <PackageReference Include="Microsoft.AspNetCore.Razor" Version="2.2.0" /> <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" /> </ItemGroup> </Project>

注:この変更を行わないと、最後のコンパイルプロジェクトの後、カミソリは、プリコンパイル組立図を生成しません。(変更するには、他のよりエレガントな方法がある場合はここでは、メッセージを残してください、私は繰り返しにこの操作を避けるために、フォローアップのプロジェクトテンプレートを記述しようとします)。

コントローラとビューを追加する

私たちのプラグインを書く始めましょう。

ここでは、最初に作成しますPlugin1Controller.cs

 
 
コピー
public class Plugin1Controller : Controller { public IActionResult HelloWorld() { return View(); } }

その後、我々は、対応するビューファイルHelloWorld.cshtmlを追加します。

 
 
コピー
@{ } <h1>This is Demo Plugin1.</h1>

最終的なプロジェクトファイルのディレクトリを次のように

最後に、我々はDynamicPluginsDemoSiteプロジェクトのDLLにコンパイルDebugディレクトリにアイテムを送信する必要があり、プロジェクトの出力ディレクトリを変更する必要があります。

我々は最初のコンポーネントのすべての修正を完了した上で、のはDynamicPluginsDemoSiteプロジェクトを修正し始めましょう。

動的プラグインコントローラをロードする方法?

DynamicPluginsDemoSiteプロジェクトは直接DemoPlugin1を参照していないので、プロジェクトが始まったとき、それは独立してDemoPlugin1プロジェクトのコントローラを見つけることができないので、ここでは使用する必要がありApplicationPart、現在のオペレーティング環境にアセンブリDemoPlugin1をロードすること。

 
 
コピー
public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); var assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + "DemoPlugin1.dll"); var mvcBuilders = services.AddMvc(); var controllerAssemblyPart = new AssemblyPart(assembly); mvcBuilders.ConfigureApplicationPartManager(apm => { apm.ApplicationParts.Add(controllerAssemblyPart); }); mvcBuilders.SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }

コードの説明:

  • そのため、前のステップで、私たちは、この使用することができますので、中DebugディレクトリのDynamicPluginsDemoSiteにDemoPlugin1アセンブリ出力されますAssembly.LoadFile方法は、それをロードします。
  • ここで我々が使用するAssemblyPartクラスを、パッケージアセンブリにロードされますApplicationPart
  • mvcBuilders件名ConfigureApplicationPartManager方法は、現在ApplicationPart使用したプロジェクトを構成するために使用することができます

コンパイル済みのコンポーネントかみそりビューをロードするには?

コントローラがロードされた後、我々はまた、プリコンパイルプラグインカミソリビューをロードする必要があります。ここでは少し異なるの前に、我々は、使用する必要がCompileRazorAssemblyPart読み込まカプセル化するために、プリコンパイルカミソリビューを。

 
 
コピー
public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); var assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + "DemoPlugin1.dll"); var assemblyView = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + "DemoPlugin1.Views.dll"); var viewAssemblyPart = new CompiledRazorAssemblyPart(assemblyView); var controllerAssemblyPart = new AssemblyPart(assembly); var mvcBuilders = services.AddMvc(); mvcBuilders.ConfigureApplicationPartManager(apm => { apm.ApplicationParts.Add(controllerAssemblyPart); apm.ApplicationParts.Add(viewAssemblyPart); }); mvcBuilders.SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }

正味の効果は

今、私たちはDynamicPluginsDemoSite、入力/ Plugin1 / HelloWorldのは、私たちの通常のプラグインが有効になって、ブラウザで起動します。

注:DynamicPluginsDemoSiteサイトを開始する前に、DemoPlugin1プロジェクトをコンパイルしてください、生産などDemoPlugin1アセンブリは内DynamicPluginsDemoSiteに出力されます。

要約

これらは、プロジェクト全体を完了するために、フォローアップの遺骨が行われるように、簡単なMVCのプラグイン機能を単に実装されています

  • 私たちは、作業の重複を避けるために、プラグインのテンプレートを作成する必要があります。
  • そして、ビジネスモデルは、抄録を接続する必要があります。
  • あなたは、プラグインの情報を格納するデータベースを使用する必要があります。
  • 管理プラグインのプラグインをサポートしてアップグレードする必要があります。

私たちはご期待、ゆっくりと上記の機能を実現従います。

おすすめ

転載: www.cnblogs.com/lonelyxmas/p/11904673.html