WinForm应用程序中的NHibernate和AUTOFAC

时间:2012-01-06 16:52:54

标签: c# winforms nhibernate autofac

我正在寻找一个很好的教程,在WinForm应用程序中使用NHibernate配置AUTOFAC,在创建表单时注入ISession并在表单关闭时处理ISession。

我发现了很多MVC和ASP.NET示例,但没有使用WinForm。

你能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:3)

我会做这样的事情

public class FormFactory
{
    readonly ILifetimeScope scope;

    public FormFactory(ILifetimeScope scope)
    {
        this.scope = scope;
    }

    public TForm CreateForm<TForm>() where TForm : Form
    {
        var formScope = scope.BeginLifetimeScope("FormScope");
        var form = formScope.Resolve<TForm>();
        form.Closed += (s, e) => formScope.Dispose();
        return form;
    }
}

将您的ISession注册为InstancePerLifetimeScope,Autofac会在处置其范围时将其处置。在这个例子中,我正在使用“FormScope”标签,这样如果我不小心尝试从另一个范围(可能是顶级容器范围)中解析ISession,Autofac将抛出异常。

builder.Register(c => SomeSessionFactory.OpenSession())
    .As<ISession>()
    .InstancePerMatchingLifetimeScope("FormScope");

您的代码必须显式提交事务(可能是在用户单击Save或其他内容时),如果用户单击Cancel,它可能应该回滚事务。 Implicit rollback is not recommended.

答案 1 :(得分:0)

我知道为时已晚,danyolgiax已经找到了解决方案。 昨天我想知道如何在Winforms中将Autofac与MVP结合起来。我进入了article

用波兰语写的,所以请随意使用翻译。提出的想法非常简洁明了,当我们通过我们的项目迁移到Autofac时,我肯定会遵循它。 我认为值得保留在那里应该遇到同样问题的人。