2017-04-07 61 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 '委托中捕获。 –