任何使用ASP.Net的人都可能看到过接受用于配置某些选项的Action<T>
委托的方法。以ASP.Net Core MVC Startup.cs为例,以此为例。
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication().AddJwtBearer(options => {
options.Audience = "something";
// ...
});
//...
}
.AddJwtBearer()
方法将Action<T>
委托与lambda表达式中配置的参数一起使用,我正在尝试做的是在我的一个项目中复制它,但没有运气。
我得到了Method(Action<T> action)
部分,但我似乎无法检索调用该方法时配置的结果对象。
上下文的一些代码:
构建器类方法:
public ReporterBuilder SetEmail(Action<EmailConfig> config)
{
if (config is null)
throw new ArgumentNullException();
// Get configured EmailConfig somehow...
return this;
}
EmailConfig模型:
public class EmailConfig
{
public EmailProvider EmailProvider { get; set; }
public string Host { get; set; }
public int Port { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string FromAddress { get; set; }
public string ToAddress { get; set; }
}
所以我想在这里实现的是:
Reporter reporter = new ReporterBuilder()
.SetEmail(config => {
config.EmailProvider = EmailProvider.Other;
config.Host = "something";
// ...
})
.Build();
我查看了GitHub上的一些Microsoft存储库(aspnet / DependencyInjection,aspnet / Options被认为是使用这种方法的两个主要的IoC容器)来了解它们如何从Action<T>
中获取值代表,绝对没有运气。
几个小时的互联网搜索也没有帮助,因为大多数文章已经过时或者与我正在尝试做的事情无关。
我非常欢迎任何有关如何使这项工作的帮助,也欢迎提出更好的方法建议。
答案 0 :(得分:7)
您的方法需要实例化对象,然后调用方法,将对象传递给方法。 const role = 'super_admin';
const str = role
.split('_')
.map(word => word = word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
.join(' ');
console.log(str);
将返回一个对象。这是Func<T>
,不会返回任何内容。相反,它接受该对象。
ActionT<T>