1
        builder.RegisterType<DataContext>().As<DbContext>();

        builder.RegisterType<AnnoucementRepository>().As<IAnnouncementRepository>().WithParameter("DataContext", new DataContext()).InstancePerHttpRequest();
        builder.RegisterType<LanguageRepository>()
               .As<ILanguageRepository>()
               .WithParameter("DataContext", new DataContext())
               .InstancePerHttpRequest();

我有上述内容,我想找到更好的东西,我不必为"DataContext", new DataContext()我拥有的每个存储库重复。

如何注册数据上下文并注入存储库?每个http请求一次。

4

1 回答 1

2

如果您DataContext使用InstancePerHttpRequest范围注册您自己,那么 Autofac 将为DataContext您创建每个请求的实例。Autofac 还会将其注入到您的存储库中,而无需明确指定为参数:

builder.RegisterType<DataContext>().InstancePerHttpRequest();

builder.RegisterType<AnnoucementRepository>()
       .As<IAnnouncementRepository>().InstancePerHttpRequest();
builder.RegisterType<LanguageRepository>()
       .As<ILanguageRepository>().InstancePerHttpRequest();

旁注:实际上,在您的原始注册代码中,您创建了两个单独DataContext的实例,这些实例未在您的存储库之间共享。

于 2013-10-01T20:05:25.450 回答