【问题标题】:IoC Container(Prism Unity) interface resolve and C# interface limitationIoC Container(Prism Unity) 接口解析和 C# 接口限制
【发布时间】:2011-12-15 08:07:56
【问题描述】:

我有一个与 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 签名时,我仍然必须在代码中到处更改它。

【问题讨论】:

    标签: c# interface inversion-of-control prism ioc-container


    【解决方案1】:

    是的,如果您直接传递构造函数参数,这违背了 IoC 的目的。您应该重新考虑类的设计,以便只注入服务。也许您传入的参数实际上应该是类中各个方法的参数?

    【讨论】:

    • 所以所有的类都应该有默认的ctor?
    • @Zapacila:不,但它们应该只将“服务”作为构造函数参数:IoC 容器已经知道如何在没有特殊运行时参数的情况下解析和构建的类或接口。一个类只有在没有依赖项的情况下才应该有一个默认构造函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2011-10-21
    • 1970-01-01
    相关资源
    最近更新 更多