NHibernate和AUTOFAC在WinForm应用程序中

本文关键字:应用程序 WinForm AUTOFAC NHibernate | 更新日期: 2023-09-27 18:19:42

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

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

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

NHibernate和AUTOFAC在WinForm应用程序中

我会做一些类似的事情

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");

您的代码必须显式提交事务(可能是在用户单击"保存"或其他操作时),如果用户单击"取消",它可能应该回滚事务。不建议使用隐式回滚。

我知道为时已晚,danyolgiax已经找到了解决方案。昨天我想知道如何将Autofac与Winforms的MVP结合起来。我参与了这篇文章。

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