Autofac вставляет контекст в контроллер и сущности
У меня есть приложение MVC, построенное на EF4.3, и я пытаюсь провести некоторый рефакторинг / очистку, внедряя 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-запроса на контроллере, а затем установить тот же контекст для объектов EF, имеющих свойство DbContext.
1 ответ
Хотя этот подход не использует Autofac DI, он решает мою проблему. Он перехватывает событие ObjectMaterialized на DbContext - затем вы можете использовать его для ввода любых значений, которые вам нужны. Довольно удобно....
http://blog.stephencleary.com/2011/05/getting-objectcontext-from-entityobject.html