Depoyu oluşturmak ve İş mantığı katmanında kullanmak için Simple Injector'ı kullanmaya çalışıyorum (ayrıca PerWebRequest yöntemini kullanmak istiyorum). DAL katmanında Basit enjektör, Deposu ve Bağlam nasıl kullanılır? Kod ilk
i var: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);
}
ve:
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>();
}
ve benim bağlam:
public class PASContext : DbContext, IDbContext
{
public DbSet<Product> Products { get; set; }
public DbSet<User> Users { get; set; }
public PASContext()
: base("PostAndSell")
{ }
}
sen EFRepository
görebileceğiniz gibi birini alır tek Oluşturucu sahip argüman - Bu bağlam ve p bir örneğini oluşturmak için Basit Enjektör kullanmak istiyorum çünkü oluşturulduğu sırada depoya koyun.
BLL'de ProductBLL
sınıfı var ve bu sınıftaki tüm ürünleri (bazı GetAll yöntemiyle) veritabanından almak ve iletmek istiyorum, bunu HomeController'a söyleyelim.
Bu konuda bana konuşacak birine ihtiyacım var.
Ben Application_Start()
fonksiyon I`ve altında nuger (Basit Enjektör ve Basit Enjektör ASP.NET Entegrasyonu) benim global.asax.cs dosyasında da
doğru paketleri yükleyerek başladı ekledi:
var container = new SimpleInjector.Container();
container.RegisterPerWebRequest<IRepository<Product>, EFRepository<Product>>();
Ancak, Context örneğini nerede oluşturabilirim? ve iş katmanına nasıl erişebilirim?
Teşekkürler, ancak BLL'de mantıksal bir sınıfım varsa, depoyu nasıl kullanabilirim?Benim konseptim, BLL'in DAL'ye depolar ve MVC görüşmeleri aracılığıyla BLL ile productBLL gibi sınıflar aracılığıyla konuşmasıdır. Ayrıca bu depoya HomeController'da erişmek istersem bunu nasıl yapabilirim? ve EF veritabanını oluşturacak mı? – jony89
BLL sınıfına sahip olmak, yalnızca herhangi bir mantığınız olduğunda kullanışlıdır. Fakat mantığınız varsa, elbette ProductBLL'i ürününüz yerine kontrolörünüze enjekte etmeniz gerekecektir (ya da eklenmiş davranışlar sadece günlüğe kaydetme, güvenlik, doğrulama, vb. Gibi konuları ilgilendiriyorsa) bunun yerine bir yatıştırıcıdır). Eğer kontrol ünitesindeki repo'ya erişmek istiyorsanız, kontrol cihazına birİsoepository enjekte edersiniz; bununla ilgili hiçbir şey yok. Bu sadece çalışır. Gördüğünüz gibi – Steven
Bu konuda oldukça yeni biriyim. Bir kontrolöre'u nasıl "enjekte edebilirim?" Hangi kod "enjekte" kelimesiyle ilişkili? 'productBLL' içindeki Repostiroy'a nasıl erişebilir ve denetleyiciye nasıl enjekte edebilirim - Lütfen bana bununla ilgili bazı kodları göster. Buna ek olarak hala bir "PASContext" örneğinin "EFRepository" yapıcısına geçtiğini ve veritabanı oluşturulacağını göremiyorum. Bu kod ilk program olduğu gibi. –
jony89