ورود

View Full Version : تزریق وابستگی در فیلتر ها



micro_bhk
یک شنبه 18 بهمن 1394, 00:34 صبح
با سلام
در مورد "تزریق وابستگی در فیلتر ها" مقاله ای با این عنوان هست و توضیحات کامل داده

http://www.dotnettips.info/courses/topic/5/a727a21b-5cec-4dbd-95f0-91d87e2218e5

متاسفانه وقتی که موارد ذکر شده رو انجام میدم، با خطای زیر روبرو میشم:


'DI06.CustomFilters.LogAttribute' does not contain a constructor that takes 0 arguments


مقاله های دیگه رو هم بررسی کردم ولی باز همین مشکل رو داره، چون تزریق از طریق سازندست وقت فیلتر رو به صورت [Log] استفاده می کنم پیغام خطای زمان کامپایل رو میده

چطور میتونم مشکل ایجاد شده رو رفع کنم؟




[Log]
public ActionResult Index()
{
return View();
}


public class LogAttribute : ActionFilterAttribute
{
private readonly IContainer _container;


public LogAttribute(IContainer container)
{
_container = container;
}


public override void OnActionExecuted(ActionExecutedContext filterContext)
{
_container.GetInstance<ILogActionService>().Log("......data......");
//LogActionService.Log("......data......");
base.OnActionExecuted(filterContext);
}
}


و ....

با تشکر

hakim22
یک شنبه 18 بهمن 1394, 07:07 صبح
برای فیلترها بهتره از Property Injection بجای Constructor Injection استفاده کنید. اینجوری خطای Construtor نمیگیرید.

anubis_ir
یک شنبه 18 بهمن 1394, 08:18 صبح
به آخرين سورس ارسال شده‌ي آن مقاله در GitHub مراجعه كنيد.

micro_bhk
یک شنبه 18 بهمن 1394, 10:45 صبح
به آخرين سورس ارسال شده‌ي آن مقاله در GitHub مراجعه كنيد.

مسال ذکر شده نیز بررسی شد، خطای مربوطه وجود دارد

درکنترلر Home خط 31 [Log] را از حالت کامنت خارج کنید، خطای مذکور قابل مشاهده می باشد

micro_bhk
یک شنبه 18 بهمن 1394, 10:46 صبح
برای فیلترها بهتره از Property Injection بجای Constructor Injection استفاده کنید. اینجوری خطای Construtor نمیگیرید.


در حالت Property Injection و در صورت کار با دیتابیس وهله سازی یک بار در طول عمر برنامه انجام میگیرد و مشکل ساز خواهد بود.

micro_bhk
پنج شنبه 22 بهمن 1394, 13:43 عصر
با عرض پوزش از خطایی که از جانب بنده در مطرح کردن این سوال ایجاد شد؛ مثال فوق در سورس خودش به درستی عمل میکنه.

سوال خودم رو اصلاح می کنم.
این مثال تزریق وابستگی رو به صورت سراسری تعریف کرده، به همین خاطر نیازی به گذاشتن [Log] بالای کنترلر یا کلاس نیست (در این مثال )

می خواستم ببینم که راهی هست برای تزریق وابستگی به فیلتر از طریق سازنده (نمیخوام به صورت سراسری تعریفش کنم) و به همون صورت مثلا [Log] رو رو هر اکشنی یا کنترلی که خواستم اعمال کنم؟