.NetCoreアプリケーションのどこからでも構成にアクセスする方法

mo_size

.Net Core 2.1で構成をセットアップしてアクセスするさまざまな方法と、推奨されていると思われるオプションパターンに関するドキュメントを読みました(https://docs.microsoft.com/en-us/aspnet/core/fundamentals / configuration / options?view = aspnetcore-2.1)。しかし、私は自分が働きたいものを手に入れることができないようです:

私は次のことをしました:

AppSettings:

{
  "ConnectionStrings": {
    "DefaultConnStr": "Server=(localdb)\\MSSQLLocalDB;Database=_CHANGE_ME;Trusted_Connection=True;MultipleActiveResultSets=true;Integrated Security=true",
    "AW2012ConnStr": "Server=localhost;Database=AW2012;Trusted_Connection=True;MultipleActiveResultSets=true;Integrated Security=true"
  }
}

MyConfig:

public class MyConfig
{
    public string AWConnStr { get; }
    public string DefaultConnStr { get; }
}

起動:

public class Startup
{

public IConfiguration _config { get; set; }

public Startup(IHostingEnvironment env)
{
     var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
     _config = builder.Build();

}

public void ConfigureServices(IServiceCollection services)
{
      services.AddOptions();

      //add config to services for dependency injection
      //services.AddTransient<IMyConfig, MyConfig>();
     //services.AddScoped<IMyConfig, MyConfig>();
     var section = _config.GetSection("ConnectionStrings");
     services.Configure<MyConfig>(section);
}

    private static void HandleGetData(IApplicationBuilder app)
    {
        //DataHelper dataHelper = new DataHelper(_dataHelper);
        var _dataHelper = app.ApplicationServices.GetService<DataHelper>();

        app.Run(async context =>
        {
            //await context.Response.WriteAsync("<b>Get Data</b>");
            //await context.Response.WriteAsync(dataHelper.GetCompetitions(context.Request.QueryString.ToString()));
            await context.Response.WriteAsync(_dataHelper.GetCompetitions(context.Request.QueryString.ToString()));
        });
    }


  public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {

            app.Map("/Route1", HandleRoute1);

            app.Map("/Route2", HandleRoute2);

            app.Map("/GetData", HandleGetData);

            app.Run(async (context) =>
            {
                await context.Response.WriteAsync("Non Mapped Default");
            });
        }
 }

次に、コード内の任意のクラスの構成にアクセスしたいと思います。たとえば、次のクラスがあり、構成情報を読みたいだけです。

public interface IDataHelper
{
    string GetCompetitions(string val);
}

public class DataHelper : IDataHelper
{
    private readonly MyConfig _settings;

    public DataHelper(IOptions<MyConfig> options)
    {
        _settings = options.Value;
    }

    public string GetCompetitions( string queryStringVals)
    {

        return _settings.AWConnStr;

    } 
}

上記のStartupクラスで示したように、スタートアップのHandleGetData関数で何かにアクセス/呼び出したいので、次のルートを参照すると、http:// localhost:xxxxx / getdata何かから応答が返されます。 .GetData関数。

これは正しいです?私が抱えている問題は、Somethingクラスのインスタンスを作成するときに、構成オブジェクトを渡す必要があるということですが、それを注入する目的を損なうものではありません。DBContextが構成オプションでコンテキストを注入する方法と同様に機能するようにこれを設定するにはどうすればよいですか。そして、services.AddTransientとservices.AddScopedの違いは何ですか?私は両方ともサービスを登録する方法として見ました。

アレックスリアボフ

.Net CoreアプリケーションでIConfigurationは、のインスタンスをコントローラーや他のクラスに渡してはいけませんIOtions<T>代わりに、強く型付けされた設定を使用する必要がありますこれをケースに適用して、MyConfigクラスを変更します(プロパティ名もconfig内の名前と一致する必要があるため、configの名前を変更する必要があります(DefaultConnection-> DefaultConnStr、AW2012ConnStr-> AWConnStr、またはその逆)。

public class MyConfig
{    
    public string AWConnStr { get; set; }
    public string DefaultConnStr { get; set; }
}

登録する:

public void ConfigureServices(IServiceCollection services)
{
    // in case config properties specified at root level of config file
    // services.Configure<MyConfig>(Configuration);

    // in case there are in some section (seems to be your case)
    var section = Configuration.GetSection("ConnectionStrings");
    services.Configure<MyConfig>(section);
}

必要なサービスにそれを注入します:

public class MyService
{
    private readonly MyConfig _settings;

    public MyService(IOptions<MyConfig> options)
    {
        _settings = options.Value;
    }
}

そして、services.AddTransientとservices.AddScopedの違いは何ですか?私は両方ともサービスを登録する方法として見ました。

一時的なライフタイムサービスは、要求されるたびに作成されます。

スコープ付きライフタイムサービスは、リクエストごとに1回作成されます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Springxml構成でSpEL内のアプリケーションプロパティにアクセスする

分類Dev

現在のアプリケーション構成にアクセスする正しい方法

分類Dev

アプリケーションのどこからでもRichTexBoxにテキストを追加する

分類Dev

アプリケーション全体で構成オブジェクトにアクセスするにはどうすればよいですか?

分類Dev

Asp.NetCoreアプリケーションでMassTransitSagaを構成する方法

分類Dev

アプリケーションは、Tomcatserver.xmlで構成されたkeyStore.jksにどのようにアクセスできますか

分類Dev

別のマシンのJSFアプリケーションからEJBにアクセスする方法

分類Dev

JavaでhttpsからWebアプリケーションにアクセスできるようにする方法

分類Dev

@Configurationを使用してSpring Bootアプリケーションの構成にアクセスする

分類Dev

ホストからコンテナのWebアプリケーションにアクセスする方法

分類Dev

Kuberetesのコンテナーでアプリケーション構成をAPから分離する方法は?

分類Dev

Spring Bootアプリケーションが自動構成クラスに特定の注釈を持っているかどうかを確認する方法

分類Dev

SpringBootアプリケーションが常に構成サービスから構成をフェッチするのはなぜですか?

分類Dev

Tomcatでアプリケーションセッションの最大期間を構成するにはどうすればよいですか?

分類Dev

WebアプリケーションがDocumentRootの外部のフォルダーにアクセスできるようにApacheを構成する際の問題

分類Dev

サーバーの外部IPアドレスからSpring Bootアプリケーションにアクセスできるようにする方法は?

分類Dev

リバースプロキシからの接続のみを受け入れるようにWebアプリケーションを構成する方法

分類Dev

あるシステムで実行されているmoquiWebアプリケーションに他のシステムからアクセスする方法

分類Dev

スプリングセキュリティでアプリケーションを構成する方法は?

分類Dev

アプリケーションのアーキテクチャとクラスの観点から、2つの列挙型の構造を多対多の関係で正しく編成するにはどうすればよいですか?

分類Dev

VisualFoxProアプリケーションからAppDomainに構成を渡す方法

分類Dev

Androidアプリケーションからインターネットにアクセスするにはどのような許可が必要ですか?

分類Dev

どのように私は、アプリケーションのファイルの説明を 'にアクセスすることができますか?

分類Dev

gunicornのpre_forkフックからアプリケーションにアクセスするにはどうすればよいですか?

分類Dev

フロントエンドアプリケーションに構成オプションを配置する最も一般的な方法は何ですか?

分類Dev

Webアプリケーションから自分のAPIに安全にアクセスするにはどうすればよいですか?

分類Dev

SpringBootアプリケーションからSessionFactoryにアクセスする

分類Dev

.NetWebアプリケーションからIBMInformixにアクセスする

分類Dev

WebアプリケーションからHDFSにアクセスする

Related 関連記事

  1. 1

    Springxml構成でSpEL内のアプリケーションプロパティにアクセスする

  2. 2

    現在のアプリケーション構成にアクセスする正しい方法

  3. 3

    アプリケーションのどこからでもRichTexBoxにテキストを追加する

  4. 4

    アプリケーション全体で構成オブジェクトにアクセスするにはどうすればよいですか?

  5. 5

    Asp.NetCoreアプリケーションでMassTransitSagaを構成する方法

  6. 6

    アプリケーションは、Tomcatserver.xmlで構成されたkeyStore.jksにどのようにアクセスできますか

  7. 7

    別のマシンのJSFアプリケーションからEJBにアクセスする方法

  8. 8

    JavaでhttpsからWebアプリケーションにアクセスできるようにする方法

  9. 9

    @Configurationを使用してSpring Bootアプリケーションの構成にアクセスする

  10. 10

    ホストからコンテナのWebアプリケーションにアクセスする方法

  11. 11

    Kuberetesのコンテナーでアプリケーション構成をAPから分離する方法は?

  12. 12

    Spring Bootアプリケーションが自動構成クラスに特定の注釈を持っているかどうかを確認する方法

  13. 13

    SpringBootアプリケーションが常に構成サービスから構成をフェッチするのはなぜですか?

  14. 14

    Tomcatでアプリケーションセッションの最大期間を構成するにはどうすればよいですか?

  15. 15

    WebアプリケーションがDocumentRootの外部のフォルダーにアクセスできるようにApacheを構成する際の問題

  16. 16

    サーバーの外部IPアドレスからSpring Bootアプリケーションにアクセスできるようにする方法は?

  17. 17

    リバースプロキシからの接続のみを受け入れるようにWebアプリケーションを構成する方法

  18. 18

    あるシステムで実行されているmoquiWebアプリケーションに他のシステムからアクセスする方法

  19. 19

    スプリングセキュリティでアプリケーションを構成する方法は?

  20. 20

    アプリケーションのアーキテクチャとクラスの観点から、2つの列挙型の構造を多対多の関係で正しく編成するにはどうすればよいですか?

  21. 21

    VisualFoxProアプリケーションからAppDomainに構成を渡す方法

  22. 22

    Androidアプリケーションからインターネットにアクセスするにはどのような許可が必要ですか?

  23. 23

    どのように私は、アプリケーションのファイルの説明を 'にアクセスすることができますか?

  24. 24

    gunicornのpre_forkフックからアプリケーションにアクセスするにはどうすればよいですか?

  25. 25

    フロントエンドアプリケーションに構成オプションを配置する最も一般的な方法は何ですか?

  26. 26

    Webアプリケーションから自分のAPIに安全にアクセスするにはどうすればよいですか?

  27. 27

    SpringBootアプリケーションからSessionFactoryにアクセスする

  28. 28

    .NetWebアプリケーションからIBMInformixにアクセスする

  29. 29

    WebアプリケーションからHDFSにアクセスする

ホットタグ

アーカイブ