是否可以解析IOptions的实例
不要使用
选项
您可以使用
serviceCollection手动创建服务提供程序。BuildServiceProvider()
但这会导致警告:
从应用程序代码调用“BuildServiceProvider”会导致创建一个额外的单例服务副本。考虑诸如依赖注入服务之类的选项作为“配置”参数。
我怎样才能做到这一点?
public void ConfigureServices(IServiceCollection services)
{
services.Configure<AppSettings>(
configuration.GetConfigurationSection(nameof(AppSettings)));
// How can I resolve IOptions<AppSettings> here?
}
所有其他答案都告诉您手动构建iSeries Provider
以获得IOPS
从应用程序代码调用“BuildServiceProvider”会导致创建一个额外的单例服务副本。考虑诸如依赖注入服务之类的选项作为“配置”参数。
正确的方法是实现这一点,它可以在所有版本的ASP中安全可靠地工作。NET的核心,是实现
IConfigureOptions
例如,您希望添加一个自定义模型验证器,该验证器依赖于应用程序的其他服务之一。起初,这似乎是不可能的——没有办法解决
IMyServiceDependency
,因为您无法访问iSeries Provider
:
public class MyModelValidatorProvider : IModelValidatorProvider
{
public MyModelValidatorProvider(IMyServiceDependency dependency)
{
...
}
}
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(options =>
{
options.ModelValidatorProviders.Add(new MyModelValidatorProvider(??????));
});
}
但是
的魔力
public class ConfigureMvcOptions : IConfigureOptions<MvcOptions>
{
private IMyServiceDependency _dependency;
public MyMvcOptions(IMyServiceDependency dependency)
=> _dependency = dependency;
public void Configure(MvcOptions options)
=> options.ModelValidatorProviders.Add(new MyModelValidatorProvider(_dependency));
}
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
...
// or scoped, or transient, as necessary for your service
services.AddSingleton<IConfigureOptions<MvcOptions>, ConfigureMvcOptions>();
}
本质上,您将在
ConfigreServices
中的Add***(***Options)
委托中完成的任何设置现在都移动到您的IConfigreOptions
要了解更多细节,以及关于这在幕后是如何工作的信息,我建议你去看看一直优秀的安德鲁·洛克。
实例化依赖于其他服务的类的最佳方法是使用为您提供IServiceProvider的addXXX重载。这样就不需要实例化中间服务提供程序。
以下示例显示了如何在AddSingleton/AddTransient方法中使用此重载。
services.AddSingleton(serviceProvider =>
{
var options = serviceProvider.GetService<IOptions<AppSettings>>();
var foo = new Foo(options);
return foo ;
});
services.AddTransient(serviceProvider =>
{
var options = serviceProvider.GetService<IOptions<AppSettings>>();
var bar = new Bar(options);
return bar;
});
如果需要使用服务提供商手动解析服务,可以使用以下AddSingleton/AddScoped/AddTransient
重载:
// Works for AddScoped and AddTransient as well
services.AddSingleton<IBarService>(sp =>
{
var fooService = sp.GetRequiredService<IFooService>();
return new BarService(fooService);
}
如果确实需要,可以使用IServiceCollection
上的BuildServiceProvider()
方法构建中间服务提供程序:
public void ConfigureService(IServiceCollection services)
{
// Configure the services
services.AddTransient<IFooService, FooServiceImpl>();
services.Configure<AppSettings>(configuration.GetSection(nameof(AppSettings)));
// Build an intermediate service provider
var sp = services.BuildServiceProvider();
// Resolve the services from the service provider
var fooService = sp.GetService<IFooService>();
var options = sp.GetService<IOptions<AppSettings>>();
}
你需要Microsoft。扩展。依赖注入
包。
但是,请注意,这会导致多个服务提供商实例,这反过来可能会导致多个单例实例。
如果只需要绑定ConfigureServices
中的一些选项,也可以使用bind
方法:
var appSettings = new AppSettings();
configuration.GetSection(nameof(AppSettings)).Bind(appSettings);
此功能可通过Microsoft的获得。扩展。配置活页夹
包装。
我正在尝试使用Tensorflow服务项目为HDFS的Tensorflow模型提供服务。 我正在运行tenorflow服务docker容器标签1.10.1https://hub.docker.com/r/tensorflow/serving 我可以看到tensorflow/serving repo在 https://github.com/tensorflow/serving/blob/628702
配置代理服务器能干嘛 NEI toolkit 提供了代理服务器的功能,帮助将接口代理到NEI官网或者特定的服务器上 将接口代理到NEI官网 开启该功能只需将server.config.js中的online设为true, 那么对Mock Server的所有请求都将会代理到NEI官网上,该模式也被称为在线模式。 启用在线模式可以减少执行nei update的操作,在频繁更改官网数据的情况下能够大幅加快
opensource解析服务器是否包含用于配置新解析实例的模式API?我试图消除手动创建应用程序的需要。 这是通过parse.com http://blog.parse.com/announcements/create-parse-apps-with-the-new-apps-api/提供的模式API
本文向大家介绍详解Nginx如何配置Web服务器的示例代码,包括了详解Nginx如何配置Web服务器的示例代码的使用技巧和注意事项,需要的朋友参考一下 概述 今天主要分享怎么将NGINX配置作为Web服务器,并包括以下部分: 设置虚拟服务器 配置位置 使用变量 返回特定状态码 重写HTTP响应 在高层次上,将NGINX配置作为Web服务器有一些问题需要了解,定义它处理哪些URL以及如何处理这些UR
我正在使用Eclipse Juno,并且通过windows安装程序在我的PC中安装了Apache Tomcat/8.0.0-RC5。当我尝试在Eclipse中定义新服务器时,在Apache下,我没有Tomcat v8.0选项。它在Tomcat v7.0停止。如何让Apache Tomcat v8.0在Eclipse中运行?
本文向大家介绍Win10配置redis服务实现过程详解,包括了Win10配置redis服务实现过程详解的使用技巧和注意事项,需要的朋友参考一下 一,Windows安装: 下载地址:https://github.com/MicrosoftArchive/redis/releases/tag/win-3.2.100 (redis官网没有window版本所以需要在github上下载); 装Redis-x