如何配置Autofac,以便在每次创建新的DbContext时都将其创建?

问题描述

我是Autofac的新手。我的program.cs文件中有我的注册信息:

var builder = new ContainerBuilder();
builder.RegisterLogger();
builder.RegisterType<GetUserFactory>().As<IGetUser>();
builder.RegisterType<MyContext>().InstancePerLifetimeScope();
builder.RegisterType<LoginForm>();
builder.RegisterType<RegisterForm>();
builder.RegisterType<MainFormView>().As<IMainFormView>().InstancePerLifetimeScope();
builder.RegisterType<MainFormPresenter>();
builder.RegisterType<TestForm>();
builder.RegisterType<PeopleReport>();
Container = builder.Build();

当我打开MainFormView时,它第一次正常运行。但是任何第二次尝试打开它或随后的尝试都表明我的MyContext已处置。

using (var mainFormView = Program.Container.Resolve<IMainFormView>())
{
    mainFormView.SetTag(Program.Container.Resolve<MainFormPresenter>());

    var form = (MainFormView)mainFormView;

    form.ShowDialog();
}

我的问题是我应该如何配置Autofac,以便为每个MyContext请求更新我的MainFormView

更新:

仔细查看我的错误消息后,我发现被处置的是我的MainFormView而不是MyContext而不是 from __future__ import print_function,unicode_literals from PyInquirer import prompt from pprint import pprint questions = [ { 'type': 'input','name': 'first_name','message': 'What\'s your first name',} ] answers = prompt(questions) pprint(answers)

解决方法

我看到你有:

builder.RegisterType<MyContext>()
  .InstancePerLifetimeScope();
       ^^^^^^^^^^^^^

通常不应将数据库上下文声明为具有生存期范围。 See alsoalso