Entity framework 基于Web API的带Autofac的EF依赖项注入
在DbContext中保存实体时,我有一个动态注入的内务管理服务Entity framework 基于Web API的带Autofac的EF依赖项注入,entity-framework,asp.net-web-api,dependency-injection,autofac,Entity Framework,Asp.net Web Api,Dependency Injection,Autofac,在DbContext中保存实体时,我有一个动态注入的内务管理服务 protected override DbEntityValidationResult ValidateEntity(DbEntityEntry entityEntry, IDictionary<object, object> items) { var t = entityEntry.Entity.GetType(); // Housekeep var castEntityEntry = ca
protected override DbEntityValidationResult ValidateEntity(DbEntityEntry entityEntry, IDictionary<object, object> items)
{
var t = entityEntry.Entity.GetType();
// Housekeep
var castEntityEntry = castDbEntityEntryMethod
.MakeGenericMethod(new[] { t })
.Invoke(entityEntry, null);
housekeepEntityMethod
.MakeGenericMethod(new[] { t })
.Invoke(this, new[] { castEntityEntry });
return base.ValidateEntity(entityEntry, items);
}
private void HousekeepEntity<TEntity>(DbEntityEntry<TEntity> entity)
where TEntity : class
{
var housekeeper = DbConfiguration.DependencyResolver.GetService<IHousekeeper<TEntity>>();
if (housekeeper != null)
{
housekeeper.Maintain(entity);
}
}
设置容器时:
System.Data.Entity.DbConfiguration.Loaded += (s, e) =>
e.AddDependencyResolver(new AutofacDbDependencyResolver(container), overrideConfigFile: false);
但是,我的生存范围返回null。如何获取调用此操作的当前API请求?禁止在DbContext中使用。EF6现在是否允许您解决它并不重要,它仍然是一种反模式。相反,只需使用依赖项注入或通过挂接到事件来添加此内务管理。例如,可以为实体编写分部类:
public partial class MyEntities
{
public event Action<DbContext> SavingChanges = _ => { };
public override int SaveChanges()
{
this.SavingChanges(this);
return base.SaveChanges();
}
}
@蒂姆:是的,
DbContext
是工作单元模式的实现。
public partial class MyEntities
{
public event Action<DbContext> SavingChanges = _ => { };
public override int SaveChanges()
{
this.SavingChanges(this);
return base.SaveChanges();
}
}
builder.Register<MyEntities>(context =>
{
var db = new MyEntities();
db.SavingChanges += context.Resolve<IHouseKeepingService>().HousekeepEntities;
return db;
}).InstancePerLifetimeScope();