我有三个问题…
首先,你如何处理那些常见但不感兴趣的依赖,例如。 ILog,IApplicationSettings,IPermissions,IAudit。对于每个类来说,似乎有些过分,它们在构造函数中作为参数。使用DI容器的静态实例在需要时是否更好?
MyClass(ILog log,IAudit audit,IPermissions permissions,IApplicationSettings settings) // ... versus ... ILog log = DIContainer.Get<ILog>();
第二,如何处理可能使用的依赖项,但创建起来可能很昂贵。示例 – 类可能依赖于ICDBurner接口,但不希望创建具体实现,除非实际使用CD刻录功能。你在构造函数中将接口传递给工厂(例如ICDBurnerFactory),或者你再次以一种静态方式直接访问DI容器并在需要的时候请求它?
第三,假设你有一个大的Windows窗体应用程序,其中顶层GUI组件(例如MainForm)是潜在的数百个子面板或模态形式的父级,每个子面板或模态形式可能有几个依赖项。这是否意味着MainForm应该被设置为具有所有依赖的子集的所有依赖的超集?如果你这样做,这不会最终创建一个巨大的自我膨胀的怪物,构建每一个类,它可能需要你创建MainForm的时刻,浪费时间和记忆的过程中?
IUnityContainer container = new UnityContainer(); container.RegisterInstance<IUnityContainer>(container);
这样,您可以只添加一个依赖关系IUnityContainer,并使用它来创建昂贵的或很少需要的对象。主要的优点是,单元测试更容易,因为没有静态依赖。
第二:不需要传入一个工厂类。使用上面的技术,您可以使用DI容器本身在需要时创建昂贵的对象。
三:将DI容器和轻单体依赖项添加到主窗体,并根据需要通过DI容器创建其余。需要更多的代码,但正如你所说的启动成本和内存消耗的mainform将通过屋顶如果你创建一切在启动时间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。