‫۹ سال و ۱ ماه قبل، شنبه ۱۴ شهریور ۱۳۹۴، ساعت ۱۹:۲۳
در مورد فیلترهای سراسری، حلقه‌ی زیر در کلاس StructureMapFilterProvider فراخوانی نخواهد شد:
var filters = base.GetFilters(controllerContext, actionDescriptor);
foreach (var filter in filters)
بنابراین container.BuildUp ایی هم بر روی فیلتر در حال اجرا، فراخوانی نمی‌شود و وابستگی‌های آن تامین نخواهند شد.
برای حل این مشکل، بجای روش معمول معرفی فیلترهای سراسری:
 GlobalFilters.Filters.Add(new LogAttribute());
بنویسید:
 GlobalFilters.Filters.Add(SmObjectFactory.Container.GetInstance<LogAttribute>());
در این حالت، در ابتدای کار برنامه، تمام وابستگی‌های مرتبط با LogAttribute هم وهله سازی می‌شوند.

مشکل!
این وهله سازی، فقط یکبار آن هم در ابتدای برنامه انجام می‌شود. یعنی وابستگی‌های استفاده شده‌ی در فیلتر سراسری، صرفنظر از طول عمر تعریف شده‌ی برای آن‌ها توسط IoC Container، دیگر وهله سازی مجدد نخواهند شد و این مساله برای حالت‌هایی مانند کار با دیتابیس مشکل ساز است.
برای حل این مشکل، اینترفیس IContainer را به فیلتر تزریق کنید:
public class LogAttribute : ActionFilterAttribute
{
    private readonly IContainer _container;
 
    //نباید به این صورت تعریف شود چون در فیلترهای سراسری فقط یکبار وهله سازی خواهد شد
    //public ILogActionService LogActionService { get; set; }
 
    public LogAttribute(IContainer container)
    {
        _container = container;
    }
 
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        _container.GetInstance<ILogActionService>().Log("......data......");
        //LogActionService.Log("......data......");
        base.OnActionExecuted(filterContext);
    }
}
در این حالت هرچند کلاس LogAttribute ایی که به صورت فیلتر سراسری تعریف شده‌است، یکبار در آغاز کار برنامه وهله سازی می‌شود، اما وابستگی‌های مورد نیاز آن، توسط container.GetInstance به ازای هر بار فراخوانی، مجددا ساخته خواهند شد و دیگر تک وهله‌ای نخواهند بود.

روش بهتر transient کردن وابستگی‌ها: استفاده از Func
‫۹ سال و ۱ ماه قبل، جمعه ۳۰ مرداد ۱۳۹۴، ساعت ۱۷:۱۷
مطالب بالا رو مطالعه کردم اما جواب سوالم را نتوانستم پیدا کنم.
دیتابیس‌ها من کاملا جدا از هم و از سیستم‌های جداگانه هستن و نیاز به رد و بدل اطلاعات دارند.
من چگونه می‌توانم تزریق وابستگی را انجام دهم؟
‫۹ سال و ۱ ماه قبل، جمعه ۳۰ مرداد ۱۳۹۴، ساعت ۱۶:۴۰
مطالب ذکر شده رو دوباره مطالعه کردم. من در واقع مجبور به استفاده از دو دیتابیس هستم. قرار است سیستم جدید تهیه شود اما تا کامل شدن آن باید اطلاعات در سیستم قبلی برای برخی گزارشات و کارهای دیگر نیز موجود باشد و بین دو سیستم اطلاعات رد وبدل می‌شود. در واقع سیستمی قبلی اصلا Code First نیست و Migration ندارد. حال پیشنهاد شما چیست؟
استفاده‌ی همزمان از چندین Context متفاوت، نکات خاصی دارد و باید بررسی کنید که مناسب کار شما هست یا خیر. برای مطالعه‌ی بیشتر:
«استفاده از چندین Context در EF 6 Code first»
«استفاده از چندین بانک اطلاعاتی به صورت همزمان در EF Code First»     
‫۹ سال و ۱ ماه قبل، پنجشنبه ۲۹ مرداد ۱۳۹۴، ساعت ۲۳:۵۹
من در پروژه‌ام از دو Context استفاده میکنم، چطور می‌توانم مشخص کنم برای هر کنترلر از Context  مختص بخودش استفاده کند. در ضمن ممکن است در یک کنترلر از هر دو Context  استفاده کنم. آیا با نام پارامتر ورودی امکان تعیین آن هست؟
روش زیر برام جواب نداد.
  ObjectFactory.Initialize(x => {
                x.For<IUnitOfWork>().HttpContextScoped().Use(() => new AvContext()).Named("avUow");
                x.For<IUnitOfWork>().HttpContextScoped().Use(() => new TotalContext()).Named("uow");
}