C# 在ServiceStack IoC中注入时,Dbcontext IDbset属性为空
我已经在ServiceStack中的标准容器中注册了DbContext,DbContext被注入到服务中,但奇怪的是,C# 在ServiceStack IoC中注入时,Dbcontext IDbset属性为空,c#,entity-framework,
servicestack,ioc-container,dbcontext,C#,Entity Framework,
servicestack,Ioc Container,Dbcontext,我已经在ServiceStack中的标准容器中注册了DbContext,DbContext被注入到服务中,但奇怪的是,IDbSet属性是null,所有其他属性都是预期的 如果我在服务构造函数中新建DbContext,IDbSet属性将按照您的预期实例化,以证明EF的配置已正确设置。所有其他注册的服务都被正确地注入,没有这种奇怪的行为 我错过了什么 public class AppHost : AppHostBase { public override void Configure(Con
IDbSet
属性是null
,所有其他属性都是预期的
如果我在服务构造函数中新建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;
}
公共类AppHost:AppHostBase
{
公共覆盖无效配置(容器)
{
container.addScope();
//为简洁起见,此处省略了其他注册。
}
}
公共接口IDbContext:IDisposable
{
IDbSet MyEntity{get;set;}
DbChangeTracker ChangeTracker{get;}
DbContextConfiguration配置{get;}
数据库{get;}
int SaveChanges();
任务saveChangesSync();
任务保存更改同步(CancellationToken CancellationToken);
DbEntityEntry条目(T实体),其中T:类;
}
我通过这样更改注册来解决这个问题
container.Register(i=>newmydatacontext()).ReusedWithin(ReuseScope.Request)代码>
我的原始注册container.addScope()
是自动连线注册类型的缩写<代码>container.RegisterAutoWiredAs().ReusedWithin(ReuseScope.Request)代码>
我想知道Func容器在使用AutoWired时是否正在尝试解析iDbSet属性。这就解释了为什么它们最终为空。在“新建”MyDataContext时,是否使用替代(即无参数)构造函数?我只是忽略注入的对象,并在构造函数中设置字段,如so\u dbcontext=new MyDataContext()
,这样签名就不会更改。