‫۹ سال و ۱۱ ماه قبل، سه‌شنبه ۶ آبان ۱۳۹۳، ساعت ۰۴:۲۹
ببخشید آقا نصیری.من این دوره را مطالعه کردم اما جوابم را نگرفتم.
به نظر من پیاده سازی متد‌های ساده Add,Delete و ... در ServiceLayer  همون مشکلات مطرح شده در تاپیک Repository‌ها روی UnitOfWork ایده خوبی نیستند یا استفاده از الگوی Repository اضافی در EF Code first؛ آری یا خیر را تداعی می‌کند(abstraction of an abstraction).
مخصوصا زمانی که هرگز قصد تعویض ORM را در پروژه نداشته باشیم.
لطفا راهنمایی بفرمایید.
ممنون.
‫۹ سال و ۱۱ ماه قبل، سه‌شنبه ۶ آبان ۱۳۹۳، ساعت ۰۲:۳۲
با سلام
آیا هنگام استفاده همزمان از Ioc و الگوی Unit of work  ، نیاز است برای کارهای ساده ای مانند Add,Delete و ... یک اینترفیس و یک پیاده سازی از آن را در ServiceLayer تدارک ببینیم.برای مثال در یک Controller برای اضافه کردن یک موجودیت می‌توان به صورت زیر عمل کرد
_uow.Set<Book>().Add(new Book());
به جای
_BookService.Add(new Book); 
‫۹ سال و ۱۱ ماه قبل، دوشنبه ۲۸ مهر ۱۳۹۳، ساعت ۰۴:۵۹
هر زمانیکه ObjectFactory حذف شد، آن‌را با پیاده سازی زیر جایگزین کنید. کار کردن با آن هم از طریق ObjectFactory.Container خواهد بود.
public static class ObjectFactory
    {
        private static readonly Lazy<Container> _containerBuilder =
            new Lazy<Container>(defaultContainer, LazyThreadSafetyMode.ExecutionAndPublication);

        public static IContainer Container
        {
            get { return _containerBuilder.Value; }
        }

        private static Container defaultContainer()
        {
            return new Container(x =>
            {
                // تنظیمات در اینجا
            });
        }
    }
‫۹ سال و ۱۱ ماه قبل، دوشنبه ۲۸ مهر ۱۳۹۳، ساعت ۰۱:۲۹
سلام؛ توی این ورژن جدید کدها رو به صورت زیر تغییر دادم. آیا درسته؟ ممنون میشم بررسی بفرمایید
    public static class IoC
    {  
        public static IContainer Initialize()
        {
            var container = new Container(x =>
            {

               x.For<IUnitOfWork>().HybridHttpOrThreadLocalScoped().Use(() => new baranDbContext());
                x.For<IUserService>().Use<UserService>();
                x.For<IUserMetaDataService>().Use<UserMetaDataService>();
            });

            return container;
        }
        public class StructureMapControllerFactory : DefaultControllerFactory
        {
            private readonly IContainer _container;

            public StructureMapControllerFactory(IContainer container)
            {
                _container = container;
            }
            protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
            {
                if (controllerType == null)
                    return null;

                return (IController)_container.GetInstance(controllerType);
            }
        }
} 
و یه سول دیگه اینکه در یک فایل جدا معادل دستور زیر چی میشه؟ چون از این خط خطا میگیره
var userService = ObjectFactory.GetInstance<IUserService>();
- قرار هست از نگارش 4 آن ObjectFactory حذف شود. اطلاعات بیشتر (انتهای نظرات بحث)
- بله. وهله نهایی ایجاد شده آن از نوع DbContext است که اینترفیس IDisposable را پیاده سازی می‌کند.

برای معرفی کلاس‌ها و اینترفیس‌ها مطابق کد شما از ObjectFactory استفاده کردم; دو تا سوال داشتم ممنون میشم جواب بدین اول اینکه پیغام میده این کلاس منسوخ شده آیا روش جایگزینی هست؟ و سوال دوم اینکه آیا IUnitOfWork به صورت خودکار منابعش آزاد میشه؟ چون متد HttpContextScoped وجود نداره.

با تشکر
‫۹ سال و ۱۲ ماه قبل، یکشنبه ۱۳ مهر ۱۳۹۳، ساعت ۱۹:۲۷
در انجمن آن بیشتر بحث شده؛ در اینجا
در نگارش بعدی، ObjectFactory استاتیک حذف می‌شود. بجای آن باید بنویسید:
var container = new Container(x => {
// تنظیمات در اینجا
});
و بعد مثلا:
var controller = container.GetInstance(controllerType) as SomeType;
در جاهائیکه مستقیما با ObjectFactory کار می‌کردید، بهتر است IContainer آن‌را مورد استفاده قرار دهید:
public class MyController
{
    public MyController(IContainer container)
    {
    }
}