[英]Inject Value from web.config using Castle.Windsor
我正在將一些應用程序遷移到 .NET 核心,我必須從 web.config 注入一個值。
使用.Net Framework (4.7.2) 我使用Dependency.OnAppSettingsValue做到了。 但是當我遷移到 .NET Core (3.0) 或 .NET Standard (2.0) 時,我再也找不到這個選項了。
我正在使用 Castle Windsor (5.0.1) 和 Castle Core (4.4.0)。
container.Register(Component.For<IMigration>()
.ImplementedBy<SchemaMigration>()
.LifestyleTransient()
.DependsOn(Dependency.OnAppSettingsValue("createIndexes", "NHibernate.CreateIndexes")));
如何在 .NET Core 3.0 中執行此操作?
@Mark Seeman 在他的博文中展示了如何讓 Windsor 提供來自 AppSettings 的原始依賴項。
要從 IConfiguration 解決,您可以實現這樣的變體
public class ConfigurationConvention : ISubDependencyResolver
{
private readonly Microsoft.Extensions.Configuration.IConfiguration _configuration;
public ConfigurationConvention(Microsoft.Extensions.Configuration.IConfiguration configuration)
{
_configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
}
public bool CanResolve(
CreationContext context,
ISubDependencyResolver contextHandlerResolver,
ComponentModel model,
DependencyModel dependency)
{
return _configuration[dependency.DependencyKey] != null
&& TypeDescriptor
.GetConverter(dependency.TargetType)
.CanConvertFrom(typeof(string));
}
public object Resolve(
CreationContext context,
ISubDependencyResolver contextHandlerResolver,
ComponentModel model,
DependencyModel dependency)
{
return TypeDescriptor
.GetConverter(dependency.TargetType)
.ConvertFrom(
_configuration[dependency.DependencyKey]);
}
}
通過傳遞 IConfiguration object 將解析器添加到 Windsor
container.Kernel.Resolver.AddSubResolver(new ConfigurationConvention(configuration));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.