Dbcontext在注入ServiceStack时IDbset属性为空IoC

问题描述:

我已经在ServiceStack中使用标准容器注册了我的DbContext,将DbContext注入到服务中,但奇怪的是IDbSet属性为null,所有其他属性均如预期。Dbcontext在注入ServiceStack时IDbset属性为空IoC

如果我在服务构造函数中新建了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

当“新建”MyDataContext“时,你使用了一个替代的(即非参数较少的)构造函数吗? – Stefan

+0

我只是忽略注入的对象,并在构造函数中设置字段像'_dbcontext = new MyDataContext()',所以签名不会改变。 –

我已经通过更改注册来解决这个问题。

container.Register<IDbContext>(i => new MyDataContext()).ReusedWithin(ReuseScope.Request);

我的原登记container.AddScoped<IDbContext, MyDataContext>();是用于自动装配Autowired注册类型速记; container.RegisterAutoWiredAs<MyDataContext,IDbContext>().ReusedWithin(ReuseScope.Request);

我不知道在使用AutoWired时Func容器是否试图解析iDbSet属性。这可以解释为什么他们最终为空。