gpt4 book ai didi

c# - 在 Winforms 中使用 IoC 时如何不绕过容器

转载 作者:太空狗 更新时间:2023-10-29 20:15:22 26 4
gpt4 key购买 nike

我是 IoC 世界的新手,在 Winforms 应用程序中实现它时遇到了问题。我有一个非常基本的应用程序 Winform 应用程序,它使用 MVC,它是一个完成所有工作的 Controller 和一个工作对话框(显然有一个 Controller )。因此,我将所有类加载到 program.cs 中的 IoC 容器中,并使用该容器创建主窗体 Controller 。但这是我遇到问题的地方,我只想在使用时和在 using 语句中创建工作对话框 Controller 。

起初我传递了容器,但我读到这是不好的做法,而且容器是静态的,我想对这个类进行单元测试。

那么如何在不传入容器的情况下以单元测试友好的方式创建类,我正在考虑抽象工厂模式,但仅此一项就可以在不使用 IoC 的情况下解决我的问题。

我没有使用任何著名的框架,我从这篇博文中借用了一个基本框架 http://www.kenegozi.com/Blog/2008/01/17/its-my-turn-to-build-an-ioc-container-in-15-minutes-and-33-lines.aspx

我如何使用 IoC 做到这一点?这是对 IoC 的错误使用吗?

最佳答案

Ken 的帖子非常有趣,但您正处于值得更多地了解“生产”IoC 容器的地步,因为现在有一些容器支持这种情况。

例如,在 Autofac 中,您可以“生成”一个工厂作为委托(delegate):

builder.RegisterGeneratedFactory<Func<IDialogController>>();

然后在你的主窗体中:

class MainForm ... {

Func<IDialogController> _controllerFactory;

public MainForm(Func<IDialogController> controllerFactory) { ... }

void ShowDialog() {
using (var controller = _controllerFactory())
{
}
}

Autofac会在运行时填写controllerFactory构造函数参数。在单元测试中,您可以轻松地向构造函数提供 lambda。

关于c# - 在 Winforms 中使用 IoC 时如何不绕过容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1765639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com