2012-04-13 17 views
3

Ninjectを使用してデータアクセスにNopCommerceコードを再利用しようとしています。 My Q:オブジェクトに不特定ジェネリック型を挿入するにはどうすればよいですか? NopCommerceはAutofacを使用しています。NinjectとGeneric

私のオブジェクトの説明:私はコントローラー(MyController)がリポジトリ(IRepository<T>)を保持しています。このリポジトリは、ninjectコマンド:kernel.Bind(typeof(IRepository<>)).To(typeof(EfRepository<>))を使用してEfRepository<T>として注入されます。 EfRepositoryは、タイプIDbContextを保持します。これは、一般的なDbContextです。 EfRepositoryはジェネリックタイプをIDbContextに渡しませんでしたが、まだそれに注入されています。 Ninjectを使ってどうしたの?

コードです。

public class MyController : Controller 
{ 
    //a repository --> injected as EfRepository<> using generic injection using the command: 
    //kernel.Bind(typeof(IRepository<>)).To(typeof(EfRepository<>)); 
    private readonly IRepository<Account> _repository; 
} 

public class EfRepository<T> : IRepository<T> where T : BaseEntity 
{ 
    private IDbContext _context; //<<== How do I inject <T> to IDbcontext? 
} 

public interface IDbContext 
{ 
    IDbSet<T> Set<T>() where T : BaseEntity; 
} 

答えて

2

IDbContextは一般的ではないため、リポジトリに簡単に挿入して、使用時にTを汎用のSetメソッドに渡すことができます。

public class EfRepository<T> : IRepository<T> where T : BaseEntity 
{ 
    private IDbContext context; 
    public EfRepository(IDbContext dbContext) 
    { 
     this.context = context; 
    } 

    public void Do() 
    { 
     var dbSet = this.context.Set<T>(); 
    } 
} 
+0

ご回答ありがとうございます。これは前向きかつ単純な非常に厳しいものです。 –