簡體   English   中英

使用 Castle.Windsor 從 web.config 注入值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM