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.


person John Keene    schedule 10.02.2015    source источник
comment
Возможно ли, что тип свойства перепутан между DocStore.Context и Database.Context?   -  person Rake36    schedule 10.02.2015
comment
Я так не думаю ... это два разных типа с совершенно разными иерархиями наследования (т.е. без общих интерфейсов и не присваиваемых друг другу).   -  person John Keene    schedule 10.02.2015


Ответы (1)


Хотя этот подход не использует Autofac DI, он решает мою проблему. Он перехватывает событие ObjectMaterialized в DbContext - затем вы можете использовать его для ввода любых нужных вам значений. Довольно удобно ....

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

person John Keene    schedule 11.02.2015