仮想ファイルシステム - シリーズ入門ガイド

それは主に埋め込む(JS、CSS、画像、CSHTML ...)アセンブリファイルに使用されている。仮想ファイルシステムは、ファイル上で物理的に管理することを可能にするファイルシステム(ディスク)に存在しない、と実行されます彼らは同じ物理ファイルを使用するようにしたいです。

Volo.Abp.VirtualFileSystemナゲット包

Volo.Abp.VirtualFileSystemは、パッケージマネージャコンソール(PMC)を使用して、仮想ファイルシステムのコアパッケージであり、あなたのプロジェクトにそれをインストールします。

Install-Package Volo.Abp.VirtualFileSystem

あなたはそれを手動でインストールする必要はありませんので、ほとんどの場合、すでにこのnugetパッケージをインストールし、デフォルトのテンプレートを開始します。

その後、モジュールを追加することができます  AbpVirtualFileSystemModuleの  依存関係:

using Volo.Abp.Modularity;
using Volo.Abp.VirtualFileSystem;

namespace MyCompany.MyProject
{
    [DependsOn(typeof(AbpVirtualFileSystemModule))]
    public class MyModule : AbpModule
    {
        //...
    }
}

登録埋め込まれたファイル

あなたが最も簡単な方法はである。埋め込まれたリソースとしてファイルをマークする最初の必要性、アセンブリ内にファイルを埋め込む  ソリューションエクスプローラ  見つけるし、ファイルを選択し、  「プロパティ」  ウィンドウ  「ビルドアクションが」  に設定されている  組み込み」資源」のような:

複数のファイルを追加する必要がある場合、これは非常に面倒な代わりになる、ことができます直接編集する。  .Csprojの  ファイル:

<ItemGroup>
  <EmbeddedResource Include="MyResources\**\*.*" />
  <Content Remove="MyResources\**\*.*" />
</ItemGroup>

この構成は、アイテムを再帰的に追加  MyResourcesでに  (追加将来の新しいファイルを含む)フォルダのすべてのファイルを。

その後、必要があります  AbpVirtualFileSystemOptions 仮想ファイルシステムなどに埋め込まれたファイルを登録するモジュールを設定するには:

using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Modularity;
using Volo.Abp.VirtualFileSystem;

namespace MyCompany.MyProject
{
    [DependsOn(typeof(AbpVirtualFileSystemModule))]
    public class MyModule : AbpModule
    {
        public override void ConfigureServices(ServiceConfigurationContext context)
        {
            Configure<AbpVirtualFileSystemOptions>(options =>
            {
                //Register all embedded files of this assembly to the virtual file system
                options.FileSets.AddEmbedded<MyModule>("YourRootNameSpace");
            });

            //...
        }
    }
}

AddEmbedded 拡張メソッドは、アセンブリ与えられたクラスからすべての埋め込まれたファイルを見つけ、クラスを必要とし、それはまた、より簡潔な表現を持っている仮想ファイルシステムにそれらを登録します。

options.FileSets.Add(new EmbeddedFileSet(typeof(MyModule).Assembly), "YourRootNameSpace");

「YourRootNameSpaceは、」プロジェクトのルート名前空間名です。プロジェクトのルート名前空間名が空白の場合、この引数を渡しません。

IVirtualFileProvider:仮想ファイルを取得します。

ファイルは、アセンブリに埋め込まれて使用することができる仮想ファイルシステムに登録された後IVirtualFileProvider、ファイルやディレクトリの内容を取得するには:

public class MyService
{
    private readonly IVirtualFileProvider _virtualFileProvider;

    public MyService(IVirtualFileProvider virtualFileProvider)
    {
        _virtualFileProvider = virtualFileProvider;
    }

    public void Foo()
    {
        //Getting a single file
        var file = _virtualFileProvider.GetFileInfo("/MyResources/js/test.js");
        var fileContent = file.ReadAsString(); //ReadAsString is an extension method of ABP

        //Getting all files/directories under a directory
        var directoryContents = _virtualFileProvider.GetDirectoryContents("/MyResources/js");
    }
}

開発中に埋め込まれた処理ファイル

開発者は、アセンブリモジュールを参照する(またはnugetパッケージを追加)別のプロジェクトでは非常に価値のある再利用可能なモジュールを作成するためにそれを使用することができますアセンブリモジュールと缶に埋め込まれたファイルは、しかし、。自体少し困難になります。

あなたが埋め込まれたJavaScriptファイルが含まれているモジュールを開発していると仮定します。あなたは、ファイルを変更すると、あなたは、プロジェクトを再コンパイルしたアプリケーションを再起動して変更を有効にするには、ブラウザのページを更新しなければならない。明らかに、これは非常に時間がかかり、面倒です。

必要なのは、JavaScriptファイルの同期への変更は、ときに、ブラウザの更新。だから、開発中のアプリケーションに直接物理ファイルを使用する機能である  ReplaceEmbeddedByPhysical 方法は、それを可能にします。

次の例が示すアプリケーションは、埋め込みファイル(「MyModuleという」)を含むモジュールに依存しており、アプリケーションは、開発プロセスのソースコード・モジュールに直接使用することができます。

[DependsOn(typeof(MyModule))]
public class MyWebAppModule : AbpModule
{
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        var hostingEnvironment = context.Services.GetHostingEnvironment();

        if (hostingEnvironment.IsDevelopment()) //only for development time
        {
            Configure<AbpVirtualFileSystemOptions>(options =>
            {
                //ReplaceEmbeddedByPhysical gets the root folder of the MyModule project
                options.FileSets.ReplaceEmbeddedByPhysical<MyModule>(
                    Path.Combine(hostingEnvironment.ContentRootPath, "..\\MyModuleProject")
                );
            });
        }

        //...
    }
}

仮定上のコードMyWebAppModuleMyModule二つの異なるプロジェクトでのVisual Studioソリューションは、  MyWebAppModule依存していますMyModule

ASP.NETコアの統合

仮想ファイルシステムは、シームレスにASP.NETコアと統合します:

  • 仮想ファイルは同じ(静的)ファイルのWebアプリケーション上の物理ように使用することができます。
  • カミソリビュー、カミソリページ、JS、CSS、画像ファイル、および他のすべてのWebコンテンツは、物理ファイルと同じの組み立ておよび使用に埋め込むことができます。
  • ファイルのようにアプリケーション(または他のモジュール)は、単に同じ名前と拡張子を持つように同じフォルダ内の仮想ファイルに、仮想ファイルのモジュールをカバーすることができます。

仮想ファイルミドルウェア

ミドルウェアは、クライアント/ブラウザに組み込まれた仮想ファイル(JS、CSS、画像...)ファイルを提供するために使用される、などの  wwwrootの  静的ファイルミドルウェアの後にそれを追加するには、物理的(静的)ファイルフォルダとして、次のように:

app.UseVirtualFiles();

仮想ファイル物理ファイルを覆うように、物理的ファイルは、同じ場所に仮想ファイルを配置することによって可能になるように仮想ファイルミドルウェアミドルウェア静的ファイルを追加した後。

仮想ファイルミドルウェア仮想コンテンツwwwrootフォルダ - 静的ファイルなどがあります。

ビュー&ページ

あなたのアプリケーションに埋め込まれたかみそりビュー/ページを使用するには、何も設定しない。彼らは唯一の標準ビュー/ページの仮想フォルダに開発されるモジュール内に配置する必要があります。

モジュール/アプリケーションが同じ場所に新しいファイルを配置する場合は、それが埋め込まれたビュー/ページが上書きされます。

 

87元記事公開 ウォン称賛69 ビューに60万+を

おすすめ

転載: blog.csdn.net/S2T11Enterprise/article/details/104530274