سؤال

أنا أحاول تنفيذ وحدة من نمط العمل من خلال تمرير مثيل وحدة العمل في مستودعات بلدي.

الكود ذي الصلة من 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<> إلخ.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top