WinForm 应用程序中的 NHibernate 和 AUTOFAC

dan*_*iax 5 c# nhibernate autofac winforms

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

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

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

def*_*mer 4

我会做这样的事情

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

builder.Register(c => SomeSessionFactory.OpenSession())
    .As<ISession>()
    .InstancePerMatchingLifetimeScope("FormScope");
Run Code Online (Sandbox Code Playgroud)

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