- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在我看来,让域服务需要 IOptions<T>
的实例是个坏主意。传递它的配置。现在我必须将额外的(不必要的?)依赖项添加到库中。我见过很多注入(inject) IOptions
的例子遍布网络,但我看不到它的额外好处。
为什么不直接将实际的 POCO 注入(inject)到服务中呢?
services.AddTransient<IConnectionResolver>(x =>
{
var appSettings = x.GetService<IOptions<AppSettings>>();
return new ConnectionResolver(appSettings.Value);
});
或者甚至使用这种机制:
AppSettings appSettings = new AppSettings();
Configuration.GetSection("AppSettings").Bind(appSettings);
services.AddTransient<IConnectionResolver>(x =>
{
return new ConnectionResolver(appSettings.SomeValue);
});
设置的使用:
public class MyConnectionResolver
{
// Why this?
public MyConnectionResolver(IOptions<AppSettings> appSettings)
{
...
}
// Why not this?
public MyConnectionResolver(AppSettings appSettings)
{
...
}
// Or this
public MyConnectionResolver(IAppSettings appSettings)
{
...
}
}
为什么要有额外的依赖?什么是IOptions
买我而不是老派的注入(inject)方式?
最佳答案
从技术上讲,没有什么能阻止您使用 ASP.NET Core 的依赖注入(inject)注册您的 POCO 类或创建包装类并返回 IOption<T>.Value
从它。
但是您将失去 Options 包的高级功能,即在源更改时自动更新它们,如您在源中所见 here .
如您在该代码示例中所见,如果您通过 services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
注册您的选项它将读取 appsettings.json 中的设置并将其绑定(bind)到模型中,并另外跟踪它的更改。编辑 appsettings.json 时,将使用新值重新绑定(bind)模型,如 here 所示.
当然,如果您想将一些基础设施泄漏到您的域中,或者传递 Microsoft.Extensions.Options
提供的额外功能,您当然需要自己决定。包裹。这是一个非常小的包,未绑定(bind)到 ASP.NET Core,因此可以独立于它使用。
Microsoft.Extensions.Options
包足够小,它只包含抽象和具体 services.Configure
过载 IConfiguration
(与配置的获取方式、命令行、json、环境、Azure key 保管库等更紧密相关)是一个单独的包。
总而言之,它对“基础设施”的依赖非常有限。
关于c# - IOptions 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41150178/
我可以将 IConfiguration 配置注入(inject)构造函数,然后通过 config["settignName"] 从 json 文件访问应用程序设置; 服务类中的示例代码: public
我已经实现了 IndexBuilderSettings,它是某些服务的模型,例如当我为其创建一个模型时,如下所示 services.AddSingleton() .Configure((set
我已经实现了 IndexBuilderSettings,它是某些服务的模型,例如当我为其创建一个模型时,如下所示 services.AddSingleton() .Configure((set
是否可以将 JSON 文件 (appsettings.json) 中的属性绑定(bind)到使用不同属性名称的类? { "WebTarget": { "WebURL": "http:/
在 ASP.NET Core 2.1 中,我有一个使用 IOptions 接口(interface)发送电子邮件的类,如下所示: public class Email { private re
在我的 .NET Core 项目中,我在 Configure 方法中有以下设置: public void ConfigureServices(IServiceCollection services)
我正在尝试在我创建的服务中注入(inject) IOptions,但它始终为 null: public class Startup { private IConfiguration confi
在我看来,让域服务需要 IOptions 的实例是个坏主意。传递它的配置。现在我必须将额外的(不必要的?)依赖项添加到库中。我见过很多注入(inject) IOptions 的例子遍布网络,但我看不到
我正在尝试创建一个使用 IOptions 的通用方法作为参数,但代码似乎无效。 Visual Studio 显示以下消息: TConfig must be a non-abstract type wi
我有一个 worker service ind dotnet core 3.1: 程序.cs: public class Program { public static voi
我正在使用我在实际应用程序中使用的相同 Autofac 模块注册编写集成测试。我使用这样的基类将其连接起来: public abstract class ContainerFixture where
我不明白!我发誓我严格按照文档 ( Options pattern in ASP.NET Core ) 进行操作,但是一旦我开始使用我的服务,选项值为 null。 这是 appsettings.jso
选项模式允许我创建包含配置值的选项对象,如下所述:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/op
我正在尝试在一个带有 NancyFX 的项目上实现选项模式(如推荐的 here )/TinyIOC但它不起作用。 我正在 Startup.cs.ConfigureServices 上注册选项方法,但是
我有一个从 ASP.Net Core(目标 4.5)和 4.5 网络应用程序引用的类库,我想共享应用程序设置。我在 4.5 端使用 Unity for DI,在 Core 端使用 Core Boots
我正在使用 IOptions<>根据 https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options
我想让类保持静态。是否有任何解决方法来注入(inject) IOptions 不修改访问修饰符? public static class Encrypter { private static
我正在尝试为一个类(在 .net Core 项目中)编写一个 xunit 测试,它看起来像: public Class FoodStore:IFoodStore { FoodList food
我刚开始使用 net core 2.1 构建 API。 我在 appsettings.json 中添加了我的连接字符串,我想访问它。 appsettings.json "MySettings":
我试图在使用内置 DI 机制的同时获得与 ASP.NET Core 2.1 应用程序一致的 .NET Framework 类库。现在,我创建了一个配置类并将适当的部分添加到 appsettings.j
我是一名优秀的程序员,十分优秀!