我正在WPF / C#中处理一个不完整的应用程序。其中大部分都编码得很好,虽然我事先并不知道控制反转它让我困惑了一段时间。现在我想我已经弄清楚了一些,但有些事情仍然让我感到困惑。
例证:我们有一个名为CoreApplication
的伟大的大班,管理一般的一切。除此之外,它还有一系列RegisterType
指令,其中包括
SharedObjects.InversionOfControl.RegisterType<IGoodClass, GoodClass>();
(SharedObjects
是一个静态类,除其他外,定义了一个名为IUnityContainer
的静态InversionOfControl
对象,在声明时用新的UnityContainer()
初始化。)
在CoreApplication
的其他地方,有一个ICommand
,其中包含代码
var goodClassForNavigation = (SharedObjects.InversionOfControl.Resolve<IGoodClass>());
我理解,调用GoodClass
的构造函数,因为Register()
已关联IGoodClass
而GoodClass
和Resolve()
被IGoodClass
调用。
精细。现在,转到GoodClass
来了解它的作用,我看到它的构造函数如下所示:
public GoodClass(CoreApplication coreApplication)
{
this.coreApplication = coreApplication;
// Other stuff happens
}
我已确保参数已正确实例化;它的各种属性和领域都有我期望的价值。
我无法理解的是,这个CoreApplication
参数来自哪里?
我试图在GoodClass
的基类中查找构造函数,但它们没有明确的构造函数。
感谢那些到目前为止依然和我在一起的人。怎么了?构造函数从哪里获取参数?它是从类中调用构造函数的吗?来自SharedObjects.InversionOfControl
的内容?
答案 0 :(得分:0)
简单地把你的DI框架搞砸了:
IGoodClass
解析为GoodClass
CoreApplication
CoreApplication
GoodClass
实例传递给构造函数CoreApplication
的实例
醇>
可以配置解析过程,例如使用按惯例注册。
我建议你阅读文章Dependency Injection with Unity。