【发布时间】:2023-02-24 03:54:47
【问题描述】:
我在 appsettings.json 文件中有带有变量的代码,所以我通过配置方法在 IServiceCollection 中注册了所有选项:
public static void Configure(IServiceCollection services, IConfiguration configuration, bool useHangfire = true)
{
services
.Configure<AuthSettings>(configuration.GetSection(AuthSettings.SectionName))
.Configure<CacheSettings>(configuration.GetSection(CacheSettings.SectionName))
..... and so on
例如,我想创建一个基(抽象)类或接口
public interface ISettings
{
public const string SectionName = "DefaultSettings";
}
public class AuthSettings: ISettings
{
public const string SectionName = "AuthSettings";
public int ConfirmCodeLength { get; set; }
public string AllowedChars { get; set; }
public TimeSpan ConfirmCodeExpiry { get; set; }
}
并像这样配置所有设置
foreach (var type in
Assembly.GetAssembly(typeof(ISettings)).GetTypes()
.Where(myType => myType.IsClass && !myType.IsAbstract && myType.IsSubclassOf(typeof(ISettings))))
{
var currentSettings = (ISettings)Activator.CreateInstance(type);
services.ConfigureOptions(currentSettings);
}
我已经对 hangfire 作业的注册做了同样的事情,但这个案例看起来有点不同。 不幸的是,这个版本不起作用,因为 currentSetting 应该实现 IConfigureOptions 但它没有。另外我不确定这段代码是否从 JSON 中获取值。 有人做过这样的事吗?
【问题讨论】:
-
是什么阻止你这样做?你面临什么实际问题?
-
实际上这是行不通的。 services.ConfigureOptions 需要实现 IConfigureOptions<TOptions> 的参数,但它不需要。我不知道如何以正确的方式做到这一点
-
@Harish 谢谢!我只是通过反射解决这个问题
标签: c# asp.net dependency-injection