ASP.NET Core(MVC6)アプリケーションのDbContext(EF6)のジェネリッククラス(Factory)を宣言しようとしています。問題は、Dependency Injectionのインターフェイスタイプが必要なことです。C#ジェネリッククラスの定義と一致する汎用インターフェイス
私は複数のアプローチを試してきましたが、google(独特ではない)は役に立たないようです。これは、私の検索が間違った言葉を使用しているか、私がやっていることが全く間違っていることを意味します。
そこで質問です:
私はプロジェクトに2 DbContextsを持っている、と私は(のCreateContext(と呼ばれる))、単一のメソッドを使用して、これらのいずれかにコンテキストを作成することができ、一般的な工場を作成したい場合は、ジェネリックインターフェイスを使用して、依存関係注入を使用することができます。正しいクラス定義はどうですか?
例インタフェース:
public interface IDbContext<C> where C: DbContext
{
C CreateContext(); //<-- generic bit required here for this method
}
例ファクトリー:
public class DbContextFactory<C> : IDbContext<C>, where C: DbContext //<--unable to get this correct
{
private C _context = null;
private string _connectionstring;
public DbContextFactory(string connectionString)
{
_connectionString = connectionString;
}
public C CreateContext()
{
try
{
var optionsBuilder = new DbContextOptionsBuilder<C>();
optionsBuilder.UseSqlServer(_connectionString);
//_context = new C(optionsBuilder.Options); //<-- issue here also
_context = default(C); //<-- how to pass options??
}
catch (Exception ex)
{
// log some error here
}
return _context;
}
}
このテーマに関するすべてのヘルプは非常に高く評価されるだろう。 :)
クラス宣言内のコンマ削除: 'パブリッククラスをDbContextFactory:DbContext' –
DavidG
それが見えるかもしれないほど愚かで、実際に(追加の小さな変化を有する)の回答をしたこと、そう答えてくれてありがとう:CはIDbContext 。ポイントに喜んでいただけると思いますが、これに「答えてください」と賞を授与してもらえますか? –
MysticSmeg
これは本当に "タイプミス"なのです。だから私はすでにそれを閉じるように投票しました。 – DavidG