2017-11-23 21 views
0

私はDbContextScopeを使用しています。私は、このジェネリックインターフェイスを実装しようとしています:汎用ファクトリインターフェイスはどのように実装しますか?

namespace EntityFramework.DbContextScope.Interfaces { 
    public interface IDbContextFactory { 
     TDbContext CreateDbContext<TDbContext>() where TDbContext : class, IDbContext; 
    } 
} 

目標は次の関数に私の実装を提供することです:

namespace EntityFramework.DbContextScope { 
    public class DbContextScope : IDbContextScope, IDisposable { 
     public DbContextScope(IDbContextFactory dbContextFactory); 
    } 
} 

私はこのインタフェースを実装する方法を見つけ出すように見えることはできませんし、それをDbContextScopeに適切に提供します。私は一般的な実装しようとした:

public class MyDbContextContextFactoryGeneric : IDbContextFactory { 
    TDbContext IDbContextFactory.CreateDbContext<TDbContext>() { 
     Type type = typeof(TDbContext); 
     if (type == typeof(MyDbContext)) { 
      return new MyDbContext(); 
     } 
     throw new NotImplementedException(); 
    } 
} 

をしかし、私は取得エラーは、次のとおりです。「暗黙のうちに 『TDbContext』にタイプ 『MyDBContext』を変換できません」。

私は明示的に実装しようとした:

public class MyDbContextContextFactory : IDbContextFactory<MyDBContext> { 
    public MyDBContext Create() { 
     return new MyDBContext(); 
    } 
} 

をしかし、私はこのようDbContextScopeに渡ししようとすると:

public class Test { 
    public void PerformTest() { 
     IDbContextFactory dbContextFactory = new MyDbContextContextFactory(); 
     using (DbContextScope scope = new DbContextScope(dbContextFactory)) { 
      // Do stuff 
     } 
    } 
} 

私が使用して行の前の行にエラーが表示されます。 "暗黙的に 'MyDbContextContextFactory'を 'EntityFramework.DbContextScope.Interfaces.IDbContextFactory'に変換することはできません。明示的な変換が存在します(キャストがありませんか?) "

どうしたの?

答えて

0

私はついに正しい構文を理解し、それを一般的な方法で解決することができました。

public class MyDbContextContextFactoryGeneric : IDbContextFactory { 
    TDbContext IDbContextFactory.CreateDbContext<TDbContext>() { 
     return typeof(TDbContext) == typeof(MyDbContext) 
      ? new MyDbContext() as TDbContext 
      : Activator.CreateInstance<TDbContext>(); 
    } 
} 
関連する問題