PDA

View Full Version : سوال: dispose



ali-miladian
یک شنبه 22 مرداد 1396, 00:08 صبح
سلام وقت شما بخیر
در صورتی که برای نمونه سازی از استراکچر مپ استفاده کنیم و قصد داشته باشیم نمونه سازی را مستقیم انجام دهیم مثل زیر

var lessonService = ManageObjectFactory.Container.GetInstance<ISaleService>();
lessonService.RemoveFinalUnregistredSale();


در این RemoveFinalUnregistredSale یک اتصال به دیتابیس جهت حذف آیتم ها داریم ولی بعد از انجام کار کانکشن باز می مونه : چطور باید کانکشن را Dispose کرد .. ممنون
----------------------------------

دستور زیر را در ApplicaitonRequest قرار داده ام :

HttpContextLifecycle.DisposeAndClearAll();



ولی اگر این سرویس ISaleService را در سازنده دریافت کنم در پایان کانکشن بسته می شود ///
------------------------------------



ممنون

ali-miladian
سه شنبه 24 مرداد 1396, 20:40 عصر
سلام دوستان
کسی نیست منو راهنمایی کن / من مستندات Structuremap هم مقداری خوندم ولی چیزی ندیدم

گفته شده با انجام دستور زیر dispose مییشه ولی انجام نشد


HttpContextLifecycle.DisposeAndClearAll();


ممنون میشم راهنمایی کنید با تشکر

hakim22
سه شنبه 24 مرداد 1396, 22:03 عصر
شما بر چه مبنایی میگید که کانکشن باز میمونه ؟ به دلیل اینکه DbContext به صورت ThreadSafe نیست و از چند Thread میشه به دیتابیس وصل شد در هر Request یک نمونه ی جدید از این کلاس ساخته میشه. ضمن اینکه قطع کردن کانکشن از وظایف StructureMap نیست. اینکار رو باید درون سرویس انجام بدید.

ali-miladian
سه شنبه 31 مرداد 1396, 22:21 عصر
سلام ممنون از جوابتون :

من DNT Profilder استاد نصیری را اجرا می کنم و همه چیز را اعلام می کنه مثلا تعداد کانکشن های باز و ....

ali-miladian
سه شنبه 31 مرداد 1396, 22:21 عصر
خود استاد نصیری دیدم توی یک کامنت جواب این سوال را ارسال کرده بود :



public static class IoCWrapper
{
public static void RunAndDispose(Action action)
{
try
{
action();
}
finally
{
// اگر در درخواست وب بودیم، به صورت خودکار در پایان کار همه چیز تمام می‌شود
if (!HttpContextLifecycle.HasContext())
{
new HybridLifecycle().FindCache(null).DisposeAndClear( );
}
}
}

public static T GetInstance<T>()
{
return SmObjectFactory.Container.GetInstance<T>();
}
}