Simple Injectorを使用してリポジトリを作成し、それをビジネスロジックレイヤーで使用しようとしています(PerWebRequestメソッドを使いたい)。Simple injector、Repository and Contextコードの使い方
public interface IRepository<T> where T : class
{
void Add(T entity);
void Delete(T entity);
void Delete(int id);
void Update(T entity);
T GetById(int Id);
IQueryable<T> All();
IEnumerable<T> Find(Func<T, bool> predicate);
}
と::
public class EFRepository<T> : IRepository<T>, IDisposable where T : class
{
#region Members
protected DbContext Context { get; set; }
protected DbSet<T> DbSet { get; set; }
#endregion
#region Constructors
public EFRepository(DbContext dbContext)
{
if (dbContext == null)
throw new ArgumentNullException("dbContext");
Context = dbContext;
DbSet = Context.Set<T>();
}
と私のコンテキスト:私はDAL層で
public class PASContext : DbContext, IDbContext
{
public DbSet<Product> Products { get; set; }
public DbSet<User> Users { get; set; }
public PASContext()
: base("PostAndSell")
{ }
}
あなたはEFRepository
、1つを取るだけで1つのコンストラクタを持って見ることができるように引数 - これは、私がコンテキストとpのインスタンスを作成するためにSimple Injectorを使用したいからですそれが作成されている間、リポジトリに尻込みます。
BLLにはクラスProductBLL
があります。データベースからそのクラスのすべての製品(一部のGetAllメソッドを含む)を取得して渡したい場合は、HomeControllerに伝えてください。
私は本当にこのことを通して私に話す人が必要です。
私は、私のglobal.asax.csファイルでもnuger(シンプルインジェクターとシンプルなインジェクターASP.NET統合)
から右のパッケージをインストールして起動さApplication_Start()
機能の下I`veが追加さ:
var container = new SimpleInjector.Container();
container.RegisterPerWebRequest<IRepository<Product>, EFRepository<Product>>();
ただし、どこでContextインスタンスを作成しますか?どのように私はビジネス層でそれにアクセスできますか?
ありがとうございます。しかし、BLLに論理を持つクラスがある場合、どうすればリポジトリを使用できますか?私のコンセプトは、BLLはリポジトリを介してDALと会話し、MVCはproductBLLのようなクラスを通じてBLLと会話することです。また、私はHomeControllerでこのリポジトリにアクセスしたいのですがどうすればいいですか? EFがデータベースを作成するときは? – jony89
BLLクラスを持つことは、実際にロジックがある場合にのみ有効です。しかし、もしあなたがロジックを持っていれば、プロダクトではなくコントローラにProductBLLを注入する必要があります(あるいは、追加された動作がロギング、セキュリティ、バリデーションなどのクロスカッティングの問題のみである場合は、代わりにIRepositoryのデコレータ)。コントローラ内のレポにアクセスするには、IRepositoryをコントローラに挿入するだけです。それについては何も気にしない。それだけで動作します。 –
Steven
私はこれでかなり初心者です。私は単にIRepositoryをコントローラーに "注入"することはできますか?どのコードが "注射"という単語に関連していますか? 'productBLL'のRepostiroyにアクセスしてコントローラに注入する方法 - これに関連するコードをいくつか表示してください。さらに、私はまだ 'PASContext'のインスタンスが' EFRepository'コンストラクタに渡される場所を見ています。いつデータベースが作成されるのでしょうか?これはコードファーストプログラムなので、 –
jony89