【问题标题】:Autofac injecting context into controller and entitiesAutofac将上下文注入控制器和实体
【发布时间】:2015-02-12 03:12:38
【问题描述】:

我有一个基于 EF4.3 构建的 MVC 应用程序,并试图通过将 DbContext 注入实体而不是传递它来进行一些重构/清理。我已经在使用 Autofac 将上下文传递给我的控制器,效果很好。但是使用 AutowireProperties 在实体上设置 DbContext 属性不起作用(似乎从未设置该属性)。这是我的设置:

var builder = new ContainerBuilder();
builder.RegisterControllers( typeof( MvcApplication ).Assembly );
builder.RegisterType<Database.Context>().InstancePerHttpRequest().WithParameter( "viewmodel_mapper", new Models.ViewModelMapper() );
builder.RegisterType<Database.Appointment>().PropertiesAutowired();
builder.RegisterType<DocStore.Context>().InstancePerHttpRequest();
var container = builder.Build();
DependencyResolver.SetResolver( new AutofacDependencyResolver( container ) );

Database.Appointment 有一个公共属性,例如:

public Context Context { get; set; }

简短的回答是我想继续在控制器上为每个 http 请求设置上下文,然后将相同的上下文设置为具有 DbContext 属性的 EF 实体。

【问题讨论】:

  • DocStore.Context 和 Database.Context 之间的属性类型是否可能混淆?
  • 我不这么认为..这是两种不同的类型,具有完全不同的继承层次结构(即,没有通用接口并且不能相互分配)。

标签: c# asp.net-mvc entity-framework autofac property-injection


【解决方案1】:

虽然这种方法不使用 Autofac DI,但它确实解决了我的问题。它挂钩 DbContext 上的 ObjectMaterialized 事件——然后您可以使用它来注入您需要的任何值。很方便....

http://blog.stephencleary.com/2011/05/getting-objectcontext-from-entityobject.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 2015-01-21
    相关资源
    最近更新 更多