ASP .NETコア-遅延オプションパターン
14993 ワード
皆さん、こんにちは.
この記事では、私たちはどのように我々のアプリケーション内の設定を定義することができる方法を説明する方法を使用して
私が開発中のアプリケーションでは、サイトマップを追加することを決めました.XMLファイルは、サイトマップを追加することを考える.XMLファイルは、適切なウェブサイトのリンクがよりインデックスされ、より効率的なSEOスコアを生成するように良い結果を与えるでしょう.後で、私が簡単にサイトマップを構成することができたパッケージがあったかどうかブラウズしている間.XMLとロボットTXTファイルは、アプリケーションに追加するには、私はパッケージの名前Winton.AspNetCore.Seo . このパッケージのおかげで、私はサイトマップを加えることができました.適切なURLを指定するだけで私のアプリケーションにXMLファイル.
そして、関連するパッケージのドキュメントを検討することで、関連サイトのURLを静的に見ることができました.XMLルート.一方、この操作を行う.
私は簡単なWebアプリケーションを作成し、私は必要な設定をインストールしてWinton.AspNetCore.Seo 関連するWebプロジェクトのパッケージ.まず、appsettingsを定義しました.JSONファイルを/sitemapに表示したいリンクを.XMLルート.同様に、ロボットの設定も可能である.txtファイルも.
それから私は
その後、アプリケーションを実行し、/sitemapに移動したとき.XMLとロボットtxtのルートは、私は関連するリンクがAppSettingsで定義されて記載されていることがわかりました.JSON
簡単な構成でこれらの操作を実行した後、私は実現したいシナリオに対処できます. 私がこの点で達成したいことは、私のアプリケーションの関連リンクを返すサービスを呼ぶことによって関連リンクを得ることです、そして、/sitemapの関連リンクをリストすることです.XMLファイルは“オプションパターン”のおかげで検索エンジンがより適切なリンクをインデックスすることができます. 私の心に浮かぶ最初のことは次のとおりです
この場合、関連する方法を検討すると、 その後、この問題について研究しながら、私はarticle アンドリューロックから.私が記事を詳しく調べたとき、私たちが実現したいシナリオが異なっていても、同じ状況(私たちは同じ結論に達しました)に遭遇しました このため、まず最初にseoconfigurationというクラスを定義し、
あなたがここで注意を払うならば、我々は 我々がする必要がある最後のことは、我々が作成したseoconfigurationクラスの延期された構成としてオプションの値が関連する依存登録プロセスの後にされるべきであると我々のアプリケーションに知らせることです.このため、我々は起動を更新することができます.csファイルは次のようになります.
ここでは、「seooptionsクラスが使用される必要があるまで、関連する構成を延期してください、そして、それが使用されなければならないとき、私が定義したクラス(ここでは設定)の上で構成メソッドで実行される操作に従って関連構成を実行します).
これで、アプリケーションを実行でき、/sitemapに移動して結果を確認できます.XMLとロボットtxtルート.
ご覧のように、我々は現在、関連するURLを動的に定義することで大きな負担から解放されます.加えて、 この記事を読んでくれてありがとうございました.次の記事でお会いしましょう.
参考文献 https://andrewlock.net/access-services-inside-options-and-startup-using-configureoptions/ https://benjamincollins.com/blog/using-dependency-injection-while-configuring-services/
この記事では、私たちはどのように我々のアプリケーション内の設定を定義することができる方法を説明する方法を使用して
IConfigureOptions<TOptions>
インターフェイス.私が開発中のアプリケーションでは、サイトマップを追加することを決めました.XMLファイルは、サイトマップを追加することを考える.XMLファイルは、適切なウェブサイトのリンクがよりインデックスされ、より効率的なSEOスコアを生成するように良い結果を与えるでしょう.後で、私が簡単にサイトマップを構成することができたパッケージがあったかどうかブラウズしている間.XMLとロボットTXTファイルは、アプリケーションに追加するには、私はパッケージの名前Winton.AspNetCore.Seo . このパッケージのおかげで、私はサイトマップを加えることができました.適切なURLを指定するだけで私のアプリケーションにXMLファイル.
そして、関連するパッケージのドキュメントを検討することで、関連サイトのURLを静的に見ることができました.XMLルート.一方、この操作を行う.
私は簡単なWebアプリケーションを作成し、私は必要な設定をインストールしてWinton.AspNetCore.Seo 関連するWebプロジェクトのパッケージ.まず、appsettingsを定義しました.JSONファイルを/sitemapに表示したいリンクを.XMLルート.同様に、ロボットの設定も可能である.txtファイルも.
{
//...
"Seo": {
"Sitemap": {
"Urls": [
{
"Priority": 1,
"RelativeUrl": "/article/what-is-new-in-csharp"
},
{
"Priority": 1,
"RelativeUrl": "/article/dotnet-5"
}
]
},
"RobotsTxt": {
"AddSitemapUrl": true
}
},
//...
}
ConfigureServices
起動時のメソッド.csファイルは次のようになります.このようにして、関連するパッケージを使用するために必要な依存関係(依存関係登録)を定義するプロセスを適用しました.public class Startup {
//...
private IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddSeo(Configuration);
services.AddSeoWithDefaultRobots(options =>
{
options.Urls = new List<SitemapUrlOptions>
{
new SitemapUrlOptions { Priority = 1, RelativeUrl = "/article/what-is-new-in-csharp" },
new SitemapUrlOptions { Priority = 1, RelativeUrl = "/article/dotnet-5" }
};
});
}
//...
}
ConfigureServices
メソッドのアクセスIServiceProvider
どういうわけか、関連するサービス(サービスを使用する)を解決することによって、そのサービスのメソッドを呼び出し、最終的にservices.AddSeoWithDefaultRobots(options => { … })
) 私はこれらのリンクを私がメソッドを定義したオプションとして指定する必要がありました.public class Startup {
public void ConfigureServices(IServiceCollection services)
{
//...
services.AddSeoWithDefaultRobots(
options =>
{
var scopeFactory = services
.BuildServiceProvider()
.GetRequiredService<IServiceScopeFactory>();
using (var scope = scopeFactory.CreateScope())
{
var provider = scope.ServiceProvider;
using (var myService = provider.GetRequiredService<MyArticleService>())
{
options.Urls = myService.GetBlogPostLinksAsync().Result;
}
}
});
//...
}
}
ConfigureServices
コンテナに関連する依存関係を登録するための主な目的は、その定義のうち、不要なコードクラウディングを形成するメソッドです.この時点で、依存関係登録プロセスが終了した後に別の解決策を見つけ、関連するオプションを実行する必要がありました(言い換えれば、遅延構成(参照設定)).IConfigureOptions
インターフェイス.このインターフェイスを検討したところ、私はそれが実現したいと思っていた状況を提供していました.つまり、私が欲しかったサービスを注入することで、私が指定したオプションの結果を簡単に定義することができました.そして、私は関連リファクタリングビジネスを始めました.IConfigureOptions<SeoOptions>
インターフェイスは次のとおりです.
public class SeoConfiguration : IConfigureOptions<SeoOptions>
{
private readonly IArticleAppService _articleAppService;
public SeoConfiguration(IArticleAppService articleAppService)
{
_articleAppService = articleAppService;
}
public void Configure(SeoOptions options)
{
var articleUrls = _articleAppService.GetArticleLinksAsync().Result;
var urls = articleUrls.Select(url => new SitemapUrlOptions
{
Priority = 1,
RelativeUrl = url
}).ToList();
//ilgili değerlerin SeoOptions sınıfına aktarılması
options.Sitemap.Urls = urls;
options.RobotsTxt.AddSitemapUrl = true;
}
}
IServiceProvider
関連する依存関係を解決し、解決する.我々は、単にコンストラクタの注入を行い、フレームワークは残りの世話をする.configureメソッドを調べると、適切なオプション(seooptions)をパラメータとして受け取ります.このメソッドでは、サービスから関連URLを受け取り、このオプションに値を割り当てます.このようにして、関連する設定を設定します.public class Startup {
//...
public void ConfigureServices(IServiceCollection services) {
//...
services.AddSingleton<IConfigureOptions<SeoOptions>, SeoConfiguration>();
services.AddSeoWithDefaultRobots();
}
//...
}
これで、アプリケーションを実行でき、/sitemapに移動して結果を確認できます.XMLとロボットtxtルート.
IConfigureOptions
インターフェイスでは、ConfigureServiceメソッドで定義する必要があるコードスニペットを削除します.参考文献
Reference
この問題について(ASP .NETコア-遅延オプションパターン), 我々は、より多くの情報をここで見つけました https://dev.to/engincanv/asp-net-core-usage-of-options-pattern-as-defered-36f8テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol