‫۱۰ سال و ۹ ماه قبل، یکشنبه ۱۵ دی ۱۳۹۲، ساعت ۱۳:۳۳
برای حالتهایی  مثل حالتی که قرار است بر روی چند صد هزار رکورد ، محاسباتی صورت گیرد و نتیجه در دیتابیس ذخیره شود اگر بخواهیم یکسری کارها مثل لاگ و استثنا و ... را به درون اینترسپتر بکشانیم و از پروکسی استفاده کنیم آیا کارایی را پایین نمی‌آورد؟
 در همین حالت اگر انتیتی‌های متفاوتی داشته باشیم و همزمان از انتیتی‌های مختلف نیاز به وهله سازی باشد چطور؟
با تشکر
‫۱۰ سال و ۹ ماه قبل، شنبه ۱۴ دی ۱۳۹۲، ساعت ۱۶:۳۴
تشکر
مشکل حل شد.
خطای منطقی بود. یه اکشن به اسم View دارم در کنترلر. و بعد وقتی در اکشن‌های دیگه‌ی این کنترلر، return view رو صدا میزدم که اطلاعات نمایش داده بشه، این متد رو صدا میزده و بعد یه حلقه بی پایان و در انتها خطای نامعلوم از طرف structuremap صادر میشد
‫۱۰ سال و ۹ ماه قبل، چهارشنبه ۱۱ دی ۱۳۹۲، ساعت ۲۲:۳۶
قسمت EnrichAllWith را حذف کنید. بعد برنامه را اجرا کنید. باز هم اجرا می‌شود و استثنایی صادر نمی‌شود. چرا؟ چون اجرای کد آن معادل است با:
double d = 0;
Console.WriteLine(1 / d); // compiles, runs, results in: Infinity
مقدار infinity برای نوع double تعریف شده اما برای نوع int خیر؛ اینطوری طراحی شده.
‫۱۰ سال و ۹ ماه قبل، چهارشنبه ۱۱ دی ۱۳۹۲، ساعت ۱۹:۵۹
برای اینکه استثای عمدی تولید کنم من از مثال ساده زیر استفاده کردم اما استثنا رخ نمی‌دهد. دلیل آن چیست؟
با تشکر
‫۱۰ سال و ۹ ماه قبل، دوشنبه ۹ دی ۱۳۹۲، ساعت ۱۸:۰۶
باید از قابلیت scan در StructureMap استفاده کنید:
            ObjectFactory.Initialize(x =>
            {
                var dynamicProxy = new ProxyGenerator();
                x.Scan(scanner =>
                    {
                        scanner.AssemblyContainingType<IMyType>(); // نحوه یافتن اسمبلی لایه سرویس

                        // Connect `IName` interface to 'Name' class automatically
                        scanner.WithDefaultConventions()
                               .OnAddedPluginTypes(plugin => plugin.EnrichWith(target =>
                                    dynamicProxy.CreateInterfaceProxyWithTargetInterface(target.GetType().GetInterfaces().First(),
                                                                 target.GetType().GetInterfaces(), target,
                                                                 new LoggingInterceptor())
                               ));
                    });
            });
- در این حالت AssemblyContainingType مشخص می‌کند که کدام اسمبلی باید اسکن شود.
- WithDefaultConventions یعنی هرجایی IName داشتیم را به صورت خودکار به Name متصل کن. (روال پیش فرض سیم کشی اینترفیس‌ها و کلاس‌ها برای وهله سازی)
- OnAddedPluginTypes یک Callback هست که زمان انجام اولیه تنظیمات به ازای هر type یافت شده فراخوانی می‌شود. در اینجا می‌شود با استفاده از EnrichWith و ProxyGenerator کار اتصال کلاس Interceptor را انجام داد.
‫۱۰ سال و ۹ ماه قبل، دوشنبه ۹ دی ۱۳۹۲، ساعت ۱۴:۳۷
با سلام
در صورتی که بخواهیم یک Interceptor فقط برای لایه سرویس داشته باشیم چطور میتونیم هنگام رجیستر کردن یکباره (بدون نوشتن تک تک تایپ ها) این اینترسپتور( EnrichAllWith  ) رو اضافه کنیم.
‫۱۰ سال و ۹ ماه قبل، شنبه ۷ دی ۱۳۹۲، ساعت ۱۳:۴۱
- بحث در مورد AOP بدون ذکر نامی از PostSharp بی‌معنا بود. به همین جهت چند قسمتی به آن اختصاص داده شد. حداقل از لحاظ بحث مفهومی ارزشمند است.
- در سازمان‌ها امکان تشکیل یک مخزن نیوگت محلی وجود دارد. یعنی فقط کافی است یکی از سیستم‌ها تبدیل به مخزن شود و بقیه از آن استفاده کنند. اطلاعات بیشتر در اینجا
- پیشنهاد من استفاده از پروژه‌های سورس باز مشابهی است مانند Fody. یک نمونه از کاربرد آن‌را در ادامه این دوره بررسی کرده‌ایم: «معرفی پروژه NotifyPropertyWeaver ». امکانات زیادی دارد. یا اینکه اصلا از IL Weaving استفاده نکنید و از dynamic proxy مطرح شده مانند پروژه castle core که در قسمت‌های قبل بررسی شد، استفاده نمائید.
- post sharp زمانیکه از طریق نیوگت نصب می‌شود، خودش را در سیستم build ویژوال استودیو مرتبط با پروژه جاری ثبت می‌کند. پس از اینکه dll یا فایل exe شما توسط VS.NET تولید شد، به صورت خودکار کار post sharp آغاز شده و کدهای IL اضافی پیاده سازی کننده aspects مدنظر را به اسمبلی‌های برنامه اضافه می‌کند.
‫۱۰ سال و ۹ ماه قبل، شنبه ۷ دی ۱۳۹۲، ساعت ۱۳:۲۰
با عرض معذرت چند سوال دارم:
1- اینطور که من متوجه شدم اگر بخواهیم در هر پروژه ای از postsharp استفاده کنیم حتما باید به اینترنت وصل باشیم و بسته چندین مگاباتی نیوگت آن را نصب کنیم. اگر اینطور است در شرکت‌ها و سازمان‌ها همه سیستم‌ها اجازه دسترسی به اینترنت را ندارند.
2- در پروژه من بعد از کامپایل یک پیغام در قسمت output درج می‌شود که می‌گوید چند روز تا انقضای این بسته فرصت دارید. پس از انقضای مهلت مقرر چکار باید کرد چون بنا دارم از این امکان در پروژه ام استفاده کنم.
3- در مثالهایی دریافتی از اینترنت یک فایل اجرایی وجود دارد به نام PostSharp.MSBuild.Samples.exe این فایل چه کاربردی دارد. چون در سیستم من اجرا نمی‌شود.
ExceptionHandling.zip
‫۱۰ سال و ۹ ماه قبل، پنجشنبه ۵ دی ۱۳۹۲، ساعت ۱۳:۳۹
روی سیستم من هیچکدام از مثال‌های شما کار نکردند. دلایل:
الف) همانطور که عرض شد، PostSharp فقط یک DLL نیست (IL Weaving به معنای دستکاری کدهای IL و اسمبلی نهایی است و افزودن کدهایی در این میان). بسته نیوگت آن، یک سری مراحل Post Build را به فایل csproj اضافه می‌کند؛ برای مثال:
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <Import Project="..\packages\PostSharp.2.1.7.30\tools\PostSharp.targets" 
    Condition="Exists('..\packages\PostSharp.2.1.7.30\tools\PostSharp.targets')" />
ب) حتما باید سیستم licensing آن توسط نیوگت نصب شود تا عملیات IL Weaving را انجام دهد.
ج) زمانیکه از طریق نیوگت نصب می‌شود، پوشه packages\PostSharp.2.1.7.30\tools آن کار اصلی IL Weaving را انجام می‌دهد و این پوشه بالای 10 مگابایت است.