在ServiceStack IoC中注入时,Dbcontext IDbset属性为null

时间:2017-08-09 08:44:23

标签: c# entity-framework servicestack ioc-container dbcontext

我已经在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;
}

1 个答案:

答案 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属性。这可以解释为什么它们最终为空。