gpt4 book ai didi

c# - CaSTLe Windsor : for N strings, 注册一个类的N个实例并将strings[n]传递给ctor

转载 作者:行者123 更新时间:2023-11-30 23:20:10 25 4
gpt4 key购买 nike

我有一个连接到数据库并提取数据的Service 类。一个新的要求是我连接到具有相同模式的第二个(或 N 个)数据库,并以相同的方式提取数据。 (每个数据库都有不同的记录,正在区域设置)。

我想重用 Service 类,只需将连接字符串传递给服务即可。 (连接字符串当前位于 App.config 中)。

所以,我想为每个我想连接的数据库注册一个我的服务类的实例,将连接字符串传递给构造函数。

在温莎城堡这可能吗?

我现在最好的选择是:

public class ServiceInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
foreach (var connection in Properties.Settings.Default.ServicedDBs)
{
container.Register(
Component.For<IService>()
.Named(connection)
.UsingFactoryMethod(() => new Service(
container.Resolve<ILog>(),
connection)));
}
}
}

最佳答案

这是可能的。实现您的服务以具有请求连接字符串的构造函数:

public interface IService { }
public class Service : IService
{
public Service(string connectionString)
{
ConnectionString = connectionString;
}
public string ConnectionString { get; set; }
}

然后在注册组件时使用 .DependsOn 指定依赖项:

public class ServiceInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
foreach (var connection in Properties.Settings.Default.ServicedDBs)
{
container.Register(
Component.For<IService>()
.ImplementedBy<Service>()
.DependsOn(Dependency.OnValue("connectionString", connection)
.Named(connection)));
}
}
}

您也可以将它作为属性并使用属性注入(inject)来设置它,但在我看来,这是适合构造函数的依赖项。有关它的更多信息,请阅读:Dependency injection through constructors or property setters?


.DependsOn 主题上曾经有一个指向 SO 文档的链接,但这不是通常可见的最新版本文档的一部分。作为清理过程的一部分,引用已被删除。

关于c# - CaSTLe Windsor : for N strings, 注册一个类的N个实例并将strings[n]传递给ctor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39858588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com