2017-08-09 12 views
1

DbContextをServiceStackの標準コンテナに登録しました.DbContextがサービスに注入されましたが、間違いなくIDbSetプロパティはnullです。Dbcontext IDbsetプロパティがServiceStackに挿入されるとnull 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; 
} 
+0

「新しく​​作成する」「MyDataContext」のときに、代替の(つまり、パラメータなしの)コンストラクタを使用していますか? – Stefan

+0

私はちょうど注入されたオブジェクトを無視し、シグネチャが変更されないようにコンストラクタで '_dbcontext = new MyDataContext()'のようにフィールドを設定します。 –

答えて

1

は、私はそうのような登録を変更することで、これを修正しました。

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

マイ原本登録container.AddScoped<IDbContext, MyDataContext>();はautowired登録タイプの省略形です。 container.RegisterAutoWiredAs<MyDataContext,IDbContext>().ReusedWithin(ReuseScope.Request);

AutoWiredを使用しているときにFuncコンテナがiDbSetのプロパティを解決しようとしているのだろうかと思います。なぜ彼らはnullに終わるのか説明します。

関連する問題