我有一个基于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实体。
答案 0 :(得分:0)
虽然这种方法不使用Autofac DI,但它确实解决了我的问题。它在DbContext上挂钩ObjectMaterialized事件 - 然后您可以使用它来注入您需要的任何值。非常方便....
http://blog.stephencleary.com/2011/05/getting-objectcontext-from-entityobject.html