Winforms 带Windows窗体的StructureMap

Winforms 带Windows窗体的StructureMap,winforms,dependency-injection,structuremap,Winforms,Dependency Injection,Structuremap,我习惯于在Web应用程序中使用StructureMap。。。但现在,我正在处理一个Windows窗体项目,我想使用它,但我不知道如何配置它 在web中,我会在Global.asax上的应用程序_Start上调用一个bootstrapper类,但我不知道如何在WinForms上执行同样的操作 谢谢 您应该以相同的方式构造引导和IoC配置(尽管我不确定如何包含表单类本身,但我还没有使用WinForms)。您需要的唯一真正区别是调用初始值设定项的时间/地点。它只需要在应用程序启动时进行。对于web应用

我习惯于在Web应用程序中使用StructureMap。。。但现在,我正在处理一个Windows窗体项目,我想使用它,但我不知道如何配置它

在web中,我会在Global.asax上的应用程序_Start上调用一个bootstrapper类,但我不知道如何在WinForms上执行同样的操作


谢谢

您应该以相同的方式构造引导和IoC配置(尽管我不确定如何包含表单类本身,但我还没有使用WinForms)。您需要的唯一真正区别是调用初始值设定项的时间/地点。它只需要在应用程序启动时进行。对于web应用程序,确实可以从应用程序开始调用它。我认为在WinForms应用程序中,它应该在


如果你在任何地方都有一个
main
方法(类似于控制台应用程序),那么它也可以工作。例如,如果WinForms应用程序是从控制台应用程序移植的,则可能出现这种情况。

对于WinForms应用程序,应用程序启动的计数器部分将是初始化第一个表单的主要方法


当在web应用程序中使用ORM映射程序时,您通常有一个经验法则,即为每个http请求创建一个数据上下文/会话。对于Winforms应用程序,您倾向于选择每个操作或每个表单的上下文。

您可以在启动应用程序的静态主方法中初始化容器。然后从容器中检索表单实例,以便可以注入任何必要的依赖项。您仍然可以将初始化代码放入引导程序中

static class Program
{
    [STAThread]
    static void Main()
    {
        ObjectFactory.Initialize(...);
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(ObjectFactory.GetInstance<Form1>());
    }
}
静态类程序
{
[状态线程]
静态void Main()
{
初始化(…);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
运行(ObjectFactory.GetInstance());
}
}

hmmm我会测试一下,很快就会回来告诉你这是否有效!:-)看见