مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

salman_b

عضویت از 1396/02/18

راهنمایی در مورد ioc در unit of work

  • یکشنبه 24 تیر 1397
  • 09:20
تشکر میکنم

با سلام

چطوری میشه در ninject کاری کرد تا dbContext برای ورود به Repository ها از unit of work گرفته شود تا این الگو نقض نشود.

در قطعه کدهای زیر اون خطی که با زرد مشخص کردم، میخوام به جای اینکه مستقیما کلاس سرویس رو بدم بهش و dbContext رو بهش پاس بدم، بیام فقط اینترفیس IUserManagement رو بهش بدم و خودش dbContext رو از unit of work که داخل سازندش ایجاد شده دریافت کنه.

با تشکر

    public interface IUserManagement
    {
        void Create(User user);
    }

    public class UserManagement : IUserManagement
    {
        private readonly TestEntities dbContext;
        public UserManagement(TestEntities dbContext)
        {
            this.dbContext = dbContext;
        }

        public void Create(User user)
        {
            dbContext.Users.Add(user);
        }
    }

    public interface IUnitOfWork
    {
        IUserManagement UserManagement { get; }
        void SaveChanges();
    }

    public sealed class UnitOfWork : IUnitOfWork
    {
        private readonly TestEntities dbContext;
        private IUserManagement userManagement;

        public UnitOfWork()
        {
            dbContext = new TestEntities();
        }

        public IUserManagement UserManagement
        {
            get
            {
                return userManagement ?? (userManagement = new UserManagement(dbContext));
            }
        }

        public void SaveChanges()
        {
            dbContext.SaveChanges();
        }
    }

پاسخ های این پرسش

تعداد پاسخ ها : 4 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • یکشنبه 24 تیر 1397
  • 10:49

مثل زیر عمل کنید 

در خط آخر UOW تزریق شده به ریپوزیتوری ها 

            ninjectKernel.Bind<IWalletRepository>().To<WalletRepository>();
            ninjectKernel.Bind<ISocialNetworkRepository>().To<SocialNetworkRepository>();
            ninjectKernel.Bind<ThemeShopContext>().To<ThemeShopContext>();

کاربر سایت

mahdy.r

عضویت از 1395/07/05

  • یکشنبه 24 تیر 1397
  • 14:47

چه اتفاقی با عث  نقض این الگو میشه؟؟

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • یکشنبه 24 تیر 1397
  • 15:52

متوجه نمیشم ؟ 

کاربر سایت

salman_b

عضویت از 1396/02/18

  • یکشنبه 24 تیر 1397
  • 20:37

با تشکر از آقای مدائنی

در پاسخ به دوستمون:

در صورتی که dbContext به صورت مشترک بین repository ها به گردش در نیاد uow نقض میشه. یعنی نباید هر repository یک dbContext جدا داشته باشه و همه باید اون رو از uow بگیرند.

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)