我一直在研究.NET的各种依赖注入框架,因为我觉得我正在开发的项目将从中受益匪浅.虽然我认为我已经很好地掌握了这些框架的功能,但我仍然不清楚如何最好地将它们引入大型系统.大多数演示(可以理解)往往是具有一个或两个依赖关系的非常简单的类.
我有三个问题......
首先,您如何处理那些常见但无趣的依赖关系,例如ILog,IApplicationSettings,IPermissions,IAudit.对于每个类来说,在构造函数中将这些作为参数似乎有点过分了.在需要时使用DI容器的静态实例来获取它们会更好吗?
MyClass(ILog log, IAudit audit, IPermissions permissions, IApplicationSettings settings)
// ... versus ...
ILog log = DIContainer.Get<ILog>();
Run Code Online (Sandbox Code Playgroud)
其次,如何处理可能使用的依赖项,但创建起来可能很昂贵.示例 - 类可能依赖于ICDBurner接口,但不希望创建具体实现,除非实际使用了CD刻录功能.您是否在构造函数中将接口传递给工厂(例如ICDBurnerFactory),或者您是否再次采用静态方式直接获取DI Container并在需要时询问它?
第三,假设您有一个大型Windows窗体应用程序,其中顶级GUI组件(例如MainForm)可能是数百个子面板或模态窗体的父级,每个子面板或模式窗体可能具有多个依赖关系.这是否意味着应该将MainForm设置为具有其子项的所有依赖项的超集作为依赖项?如果你这样做了,最终是否会创建一个巨大的自我膨胀怪物来构建你创建MainForm时可能需要的每一个类,在这个过程中浪费时间和记忆?