ASP.NET MVC ، Ninject ، مثيل واحد لكل طلب لمقاعد متعددة
-
29-09-2019 - |
سؤال
أنا أحاول تنفيذ وحدة من نمط العمل من خلال تمرير مثيل وحدة العمل في مستودعات بلدي.
الكود ذي الصلة من Global.asax.
public class SiteModule : NinjectModule
{
public override void Load() {
Bind<IUnitOfWork>().To<SqlUnitOfWork>()
.InRequestScope()
.WithConstructorArgument("connectionString", ConfigurationManager.ConnectionStrings["Entities"].ConnectionString);
Bind<IProductRepository>().To<ProductRepository>();
Bind<ICategoryRepository>().To<CategoryRepository>();
}
}
منشئي المستودعات:
public class ProductRepository {
IUnitOfWork unitOfWork;
public ProductRepository(IUnitOfWork unitOfWork) {
this.unitOfWork = unitOfWork;
}
}
public class CategoryRepository {
IUnitOfWork unitOfWork;
public CategoryRepository(IUnitOfWork unitOfWork) {
this.unitOfWork = unitOfWork;
}
}
ما أريده هو أن مثال واحد كحد أقصى SqlUnitOfWork
يتم إنشاؤه لكل طلب ويتم تمريره إلى مستودعاتي (عبر منشئيهم).
هل InRequestScope()
طريقة على IUnitOfWork
ملزمة بما فيه الكفاية؟ إن لم يكن كيف يمكنني تحقيق هذا؟
المحلول
الرمز الذي لديك سيعمل بشكل جيد. مثال واحد فقط من IUnitOfWork
سيتم منح أي فصل يطلبها (عبر حقن المُنشئ/الممتلكات أو مكالمات إلى kernel .Get<>
إلخ.)
لا تنتمي إلى StackOverflow