2017-10-26 16 views
-1

私たちはASPNet.Coreマイクロサービス(HSMService)を構築しており、別のASPNet.Coreプロジェクト(HSM)からいくつかのアセンブリを参照しています。 HSMアセンブリは、いくつかの値を設定するためにHSMServiceのルートにあるappsettings.jsonファイルを読み取る必要があります。参照されているアセンブリからASPNet.Core読み込み設定?

HSMプロジェクトの単体テストでは、appsettings.jsonファイルがテストプロジェクトのルートにあり、 .SetPath(Directory.GetCurrentDirectory())を使用して値を読み取ります。

HSMServiceでHSMアセンブリを参照するとき、DLLが配置されている/bin/Debug/netstandard2.0ディレクトリからロードしようとしています。

appsettings.jsonファイルをHSMアセンブリのHSMServiceからロードすることは可能ですか、またはHSMServiceのコードに値の設定を移す必要がありますか?どこに置く?

+0

設定をアセンブリ/ライブラリに挿入して実行時にロードすることはできませんか? –

+0

あなたはおそらくそれを間違った方法でやっているでしょう。 'appsettings.json'ファイルを持っているはずのHMServiceです。それ以外の方法ではありません。 – silkfire

+0

グローバルappsettings.jsonを使用する場合は、相対パスを使用してロードするか、環境変数(Azureなど)に設定を含めることができます。 – Nikolaus

答えて

0

我々はappsettings.jsonファイルを指すように、コンストラクタのパラメータを取るためにアセンブリを変更することに決めました

public class HSMController : Controller 
{ 
    private readonly IHostingEnvironment _hostingEnvironment; 
    public string contentRootPath { get; set; } 

    public HSMController(IHostingEnvironment hostingEnvironment) 
    { 
     _hostingEnvironment = hostingEnvironment; 
     contentRootPath = _hostingEnvironment.ContentRootPath; 
    } 

    [Route("/PingHSM")] 
    [HttpGet] 
    [ProducesResponseType(typeof(ApiResponse), 200)] 
    [ProducesResponseType(typeof(ApiResponse), 500)] 
    public IActionResult PingHSM() 
    { 
     IHSM hsm = HSMFactory.GetInstance(contentRootPath); 
     return Ok(hsm.PingHSM()); 
    } 
} 

HSMFactoryでコンストラクタはコンフィグ変数をcontentRootPathを取り、設定の面倒を見ます。

public static IHSM GetInstance(string configPath) 
{ 
    // for now, there's only one 
    Type t = GetImplements(typeof(IHSM)).FirstOrDefault(); 
    ConstructorInfo ctor = t.GetConstructor(new Type[] { typeof(string) });// assume empty constructor 
    return ctor.Invoke(new object[] { configPath }) as IHSM; 
} 
関連する問題