我是新手,所以我感谢你的帮助。我使用Castle Windsor作为我的XML配置容器。对于我的几个核心服务,这完全有效,我只是声明一个名为相同的公共属性,并按预期注入它。我的大多数核心服务都没有arg构造函数,那些是开箱即用的。但是,如果我有一个核心服务本身拥有它自己的依赖关系,那么如何最好地处理它呢?例如,假设我有一个可配置的消息队列服务:
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重新分解为没有这种依赖性?
答案 0 :(得分:0)
当注入依赖于配置,会话,请求等的东西时,你可以灵活地摆脱使你的依赖对象具有与底层源相同的结构(事实上,你应该尽可能多,否则你最终可能会意外地编写隐含依赖于该结构的代码)。注入所需的属性,而不是配置本身。我不知道如何使用XML配置完成此操作,但我知道流畅的API允许使用.FromAppSettings()
进行注入,或者您可以使用web / app.config来保存您的配置,使用.FromAppConfig()
如下所述:
How to instantiate a class based on web.config file with Castle Windsor?