2017-04-07 110 views
1

lambda Options如何在.NET Core中與services.Add*一起使用?.net核心中的配置選項

我通常做services.Configure以下,

services.Configure<MyOptions>(
    Configuration.GetSection("my-option-section-in-appsettings.json")); 

或lambda變種,

services.Configure<MyOptions>(options => 
{ 
    options.PropertyName = "some-thing" 
} 

但是,當涉及到下面,我迷路了,

services.AddMyService(options => options.UseMethod1(...)); 

我嘗試遍歷上面使用的代碼,但我找不到我的路。我能得到最快的例子是here

+0

我不認爲這是可能的,因爲配置服務是爲了保存信息。我會建議實現一個簡單的服務......就像在同一個鏈接的services文件夾中完成的一樣:https://github.com/aspnet/Identity/tree/dev/samples/IdentitySample.Mvc/Services – Kris

+0

我不喜歡不明白爲什麼你說這是不可能的,雖然我提供的鏈接清楚地包含了這個'options.UseSqlServer(Configuration.GetConnectionString(「DefaultConnection」))' –

+0

您正在詢問在配置中調用一個方法,仔細看看你的鏈接。在你的例子中,在UseSqlServer的Lambda中有一個方法調用,它不是配置... – Kris

回答

0

如何拉姆達Optionsservices.Add*工作.NET核心

常見模式是添加一個滿足Action<TOptions>委託的表達式。 TOptions是對應於add函數的對象,它使消費者有機會根據需要更新對象,設置值或調用方法。 Action<TOptions>作爲服務生命週期的一部分執行。例如,當使用擴展方法添加MVC時,框架將在服務可供使用之前調用您的操作。因此,在這個特定的例子中,所有的底層MVC服務都被註冊了,並且一個選項對象被實例化並賦予你來執行。

+0

這給了一個燈。我想我正在迷失在'builder'調用圖上。一個建築商將呼叫傳遞給另一個建築商,將其傳遞給另一個建築商。 –

+0

這部分設計之美。允許消費者通過一個選項對象表達變更的能力,在'Action '委託中捕獲。 –