‫۹ سال و ۷ ماه قبل، شنبه ۲۵ بهمن ۱۳۹۳، ساعت ۱۸:۲۱

مثال مطلب اعمال تزریق وابستگی‌ها به مثال رسمی ASP.NET Identity، جهت تکمیل کلاس ApplicationRoleManager آن بهبود داده شد (^). برای نمونه:

public IList<ApplicationUser> GetApplicationUsersInRole(string roleName)
{
    var selectedUserIds = from role in this.Roles
                          where role.Name == roleName
                          from user in role.Users
                          select user.UserId;
    return _users.Where(applicationUser => selectedUserIds.Contains(applicationUser.Id)).ToList();
}
‫۹ سال و ۷ ماه قبل، شنبه ۲۵ بهمن ۱۳۹۳، ساعت ۰۵:۱۹
- تعریف T به شکلی که در این مثال خاص، محدود شده به کلاس Post، با سرویس معمولی به نام Post تفاوتی ندارد و یک کار اضافی است. اگر محدودیت Post این T را بر دارید به الگوی Repository می‌رسید که در قسمت 11 این سری در مورد آن بحث شده‌است. همچنین مطالب دیگری هم در سایت در مورد الگوی مخزن و نقد آن موجود هستند.
- جهت مدیریت ساده‌تر کار، بهتر است هر کدام از موجودیت‌ها یک کلاس سرویس مجزا داشته باشند. ضمنا در دنیای واقعی در بسیاری از اوقات نیاز است این کلاس‌های سرویس با چندین موجودیت جهت برآورده ساختن یک منطق تجاری کار کنند. بنابراین محدود کردن آن‌ها به T عملا پاسخ نخواهد داد.
- پیشتر هم در نظرات قبلی عنوان شده، نمونه‌ی پروژه‌ی خوب در این مورد، سیستم مدیریت محتوای IRIS است که مطالعه‌ی کدهای آن می‌تواند دید بهتری به شما بدهد. 
‫۹ سال و ۷ ماه قبل، شنبه ۲۵ بهمن ۱۳۹۳، ساعت ۰۳:۰۱
- بله. لایه سرویس وابستگی به IoC Container ندارد. پروژه‌ی اصلی هم فقط در حین آغاز کار یک سری تنظیمات اولیه دارد. بنابراین IoC Container آن قابل تعویض است و در اصل هم باید باشد: «بایدها و نبایدهای استفاده از IoC Containers»
- مثال را از انتهای بحث دریافت کنید. کلاس‌های domain نباید وابستگی به Context داشته باشند.
- البته فقط در طی یک درخواست؛ برای یک واحد کاری متشکل از چند موجودیت. 
- خیر. در ابتدای هر درخواست وهله سازی می‌شود و در پایان آن dispose. طول عمر سراسری ندارد و نباید داشته باشد چون thread safe نیست.
‫۹ سال و ۸ ماه قبل، چهارشنبه ۲۲ بهمن ۱۳۹۳، ساعت ۲۲:۲۱
یک نکته‌ی تکمیلی
در متد GetScan در پایان کار، نیاز است منابع COM مورد استفاده رها شوند تا نشتی حافظه رخ ندهد:
finally
{
  if(image!=null) Marshal.ReleaseComObject(image);
  if(dialog!=null) Marshal.ReleaseComObject(dialog);
}
‫۹ سال و ۸ ماه قبل، چهارشنبه ۲۲ بهمن ۱۳۹۳، ساعت ۲۱:۴۷
در همان فایل ScannerService اگر catch را به این صورت تغییر دهید، استثناءها در کنسول سرویس نمایش داده می‌شوند.
catch(Exception ex)
{
  Console.WriteLine(ex);
برای مثال این مورد را من دریافت می‌کنم:
System.Runtime.InteropServices.COMException (0x80210015): 
Exception from HRESULT: 0x80210015 at WIA.CommonDialogClass.ShowAcquireImage
کد 0x80210015 به معنای عدم یافت شدن اسکنر است (که صحیح است).
‫۹ سال و ۸ ماه قبل، چهارشنبه ۲۲ بهمن ۱۳۹۳، ساعت ۰۲:۲۷
- «کجا باید این تابع فرخوانی کرد»
دقیقا مطابق مثالی که پیوست کردند، در اکشن متدی به همین نام. کار بیشتری هم لازم نیست انجام شود. هر زمانیکه یک موتور جستجو به سایت شما رسید، این آدرس را واکشی می‌کند (اینکه از کجا باید بداند این آدرس را نیاز است واکشی کند، مرتبط است به مباحث فایل robots.txt و قید صریح آدرس آن). پس از واکشی خودکار آن، از بانک اطلاعاتی گزارش تهیه کرده و لیستی از PostToXML را مطابق این مطلب بازگشت می‌دهید.
- « به نظر خودتون کدوم یک بهتره »
فرقی نمی‌کنند. خروجی نهایی یک استاندارد بیشتر ندارد.
- بله. این کتابخانه اساسا جاوا اسکریپتی است و کاری به نگارش دات نت شما ندارد. اینجا فقط مثالی ارائه شده جهت نمایش نحوه‌ی ارسال یک رشته از سمت سرور به کدهای کلاینت.
+ var مربوط به C# 3 است (دات نت 3.5) جهت خلاصه نویسی نوع متغیرها. در این کدها بجای اولین var بنویسید DateTime و بجای دومی string.
‫۹ سال و ۸ ماه قبل، سه‌شنبه ۲۱ بهمن ۱۳۹۳، ساعت ۱۸:۰۴
جهت اطلاع
مثال‌های این سری را از مخزن کد ذیل نیز می‌توانید دریافت کنید:
KendoUI-Samples