我已经在ServiceStack中使用标准容器注册了我的DbContext,DbContext被注入到服务中,但奇怪的是IDbSet
属性是null
,所有其他属性都是预期的。
如果我在Service构造函数中新建DbContext,IDbSet
属性就像您期望的那样实例化,只是为了证明EF的配置已经正确设置。所有其他注册服务都是正确注入的,没有这种奇怪的行为。
我错过了什么?
public class AppHost : AppHostBase
{
public override void Configure(Container container)
{
container.AddScoped<IDbContext, MyDataContext>();
// Other registrations here omitted for brevity.
}
}
public interface IDbContext : IDisposable
{
IDbSet<MyEntity> MyEntity { get; set; }
DbChangeTracker ChangeTracker { get; }
DbContextConfiguration Configuration { get; }
Database Database { get; }
int SaveChanges();
Task<int> SaveChangesAsync();
Task<int> SaveChangesAsync(CancellationToken cancellationToken);
DbEntityEntry<T> Entry<T>(T entity) where T : class;
}
答案 0 :(得分:1)
我已经通过改变注册来解决这个问题;
container.Register<IDbContext>(i => new MyDataContext()).ReusedWithin(ReuseScope.Request);
我的原始注册container.AddScoped<IDbContext, MyDataContext>();
是自动注册类型的简写; container.RegisterAutoWiredAs<MyDataContext,IDbContext>().ReusedWithin(ReuseScope.Request);
我想知道在使用AutoWired时Func容器是否正在尝试解析iDbSet属性。这可以解释为什么它们最终为空。