我有一个与IoC目的相关的问题/混淆。请考虑以下事项:
ISite - 界面
ImapSite :ISite - 非默认构造函数。
我使用容器注册具有imp的接口,如下所示:
_container.RegisterType<ISite, ImapSite>(new InjectionConstructor(typeof(string), typeof(Account)));
使用以下方法解决它:
_site = _container.Resolve<ISite>(new DependencyOverride[]
{
new DependencyOverride<string>(host),
new DependencyOverride<Account>(Account.FromAppConfig())
});
我现在想知道这是否超过了IoC的目的,因为如果我不能约束ISite实现将具有什么样的构造函数,当ImapSite更改ctor签名时,我仍然必须在代码中的任何地方更改它。
谢谢!
答案 0 :(得分:2)
是的,如果你直接传递构造函数参数,那就违背了IoC的目的。您应该重新考虑类的设计,以便只注入服务。也许您传入的参数实际上应该是类中各个方法的参数?