Castle Windsor 属性 带参数注入
Castle Windsor Property Injection with paramters
我是新手,所以非常感谢您的帮助。我使用 Castle Windsor 作为带有 XML 配置的容器。对于我的几个核心服务,这工作得很好,我只是声明一个 public 属性 命名为相同的东西,它按预期注入它。我的大部分核心服务都有无参数构造函数,这些构造函数开箱即用。但是如果我有一个核心服务本身有它自己的依赖项,那么如何最好地处理它呢?例如,假设我有一个可配置的消息队列服务:
public interface IQueueService {
void SendMessage(string msg);
}
public class SQSService : IQueueService {
private ServiceConfig _config;
public SQSService(ServiceConfig config) {
_config = config;
}
public void SendMessage(string msg){
//do message stuff
}
}
SQSService 本身需要配置才能正确初始化(端点、端口等)。有没有简单的方法来配置 DI 来解析这个配置?还是我最好重构 SQSService 使其不具有这种依赖性?
当注入依赖于配置、会话、请求等的东西时,您可以灵活地摆脱使依赖对象具有与底层源相同的结构(事实上,您应该尽可能多地尽可能,否则你最终可能会不小心编写隐式依赖于该结构的代码)。注入你需要的属性,而不是配置本身。我不确定如何使用 XML 配置完成此操作,但我知道流畅的 API 允许使用 .FromAppSettings()
进行注入,或者您可以使用 web/app.config 来使用 .FromAppConfig()
放置您的配置,如下所述:
How to instantiate a class based on web.config file with Castle Windsor?
我是新手,所以非常感谢您的帮助。我使用 Castle Windsor 作为带有 XML 配置的容器。对于我的几个核心服务,这工作得很好,我只是声明一个 public 属性 命名为相同的东西,它按预期注入它。我的大部分核心服务都有无参数构造函数,这些构造函数开箱即用。但是如果我有一个核心服务本身有它自己的依赖项,那么如何最好地处理它呢?例如,假设我有一个可配置的消息队列服务:
public interface IQueueService {
void SendMessage(string msg);
}
public class SQSService : IQueueService {
private ServiceConfig _config;
public SQSService(ServiceConfig config) {
_config = config;
}
public void SendMessage(string msg){
//do message stuff
}
}
SQSService 本身需要配置才能正确初始化(端点、端口等)。有没有简单的方法来配置 DI 来解析这个配置?还是我最好重构 SQSService 使其不具有这种依赖性?
当注入依赖于配置、会话、请求等的东西时,您可以灵活地摆脱使依赖对象具有与底层源相同的结构(事实上,您应该尽可能多地尽可能,否则你最终可能会不小心编写隐式依赖于该结构的代码)。注入你需要的属性,而不是配置本身。我不确定如何使用 XML 配置完成此操作,但我知道流畅的 API 允许使用 .FromAppSettings()
进行注入,或者您可以使用 web/app.config 来使用 .FromAppConfig()
放置您的配置,如下所述:
How to instantiate a class based on web.config file with Castle Windsor?