نظرات مطالب
طراحی افزونه پذیر با ASP.NET MVC 4.x/5.x - قسمت دوم
- در همان تصویر اولی که ارسال کردید، برگه‌ی اول headers هست و برگه‌ی سوم آن response، که صفحه‌ی زرد رنگ معروف خطاهای ASP.NET را نمایش می‌دهد.
- ابتدا بررسی کنید response ایی که در حالت دیباگ مشاهده می‌کنید چی هست.
- سپس بررسی کنید اصلا متد RegisterRoutes ایی که عنوان شد، فراخوانی می‌شود و مسیریابی آن در سیستم ثبت می‌شود یا خیر؟ (یک break point داخل آن قرار دهید)
اگر فراخوانی نمی‌شود، بررسی کنید آیا فایل‌های پوشه‌ی bin این افزونه، به پوشه‌ی bin پروژه‌ی اصلی کپی شده‌اند یا خیر؟
مطالب
امکان تغییر شکل سراسری URLهای تولیدی توسط برنامه‌های ASP.NET Core 2.2
فرض کنید اکشن متدی را به صورت زیر تعریف کرده‌اید:
namespace MvcHealthCheckTest.Controllers
{
    public class HomeController : Controller
    {
        public IActionResult ViewDetails()
        {
            return View();
        }
زمانیکه لینکی را برای آن تعریف می‌کنید:
<a asp-controller="Home" asp-action="ViewDetails">View Details</a>
در حین رندر نهایی آن، چنین شکلی را پیدا می‌کند (قسمت ViewDetails آن دقیقا با نام اکشن متد متناظر و بزرگی و کوچکی حروف آن تطابق دارد):
 https://localhost:5001/Home/ViewDetails
اکنون قصد داریم، یک چنین URLهایی را در کل برنامه به صورت زیر رندر کنیم:
الف) تمام مسیرها lowercase باشند (مناسب برای SEO؛ از این جهت که تعداد مسیرهای تکراری یکسان با حروف بزرگ و کوچک، به حداقل می‌رسند)
ب) ViewDetailsها تبدیل به view-details شوند. یعنی بین حروف جدا شده‌ی با کلمات بزرگ و کوچک، یک - قرار گیرد.

انجام یک چنین تغییرات سراسری در ASP.NET Core 2.2 با معرفی IOutboundParameterTransformer میسر شده‌است:
using System.Text.RegularExpressions;
using Microsoft.AspNetCore.Routing;

public class CustomUrlTransformer : IOutboundParameterTransformer
{
    public string TransformOutbound(object value)
    {
        return value == null ? null : Regex.Replace(value.ToString(), "([a-z])([A-Z])", "$1-$2");
    }
}
در اینجا یک تغییرشکل دهنده‌ی سراسری URLها را با پیاده سازی اینترفیس IOutboundParameterTransformer تدارک دیده‌ایم که توسط آن بین حروف بزرگ و کوچک، یک - قرار می‌دهد.

روش معرفی آن نیز به سیستم به صورت زیر است:
ابتدا نیاز است این Transformer به صورت یک ConstraintMap جدید به سیستم مسیریابی اضافه شود. در اینجا امکان تنظیم تولید LowercaseUrls نیز وجود دارد. به همین جهت نیازی نیست تا در متد TransformOutbound فوق، در انتهای کار، متد ToLower را نیز فراخوانی کنیم:
namespace MvcTest
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
    // ...
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
            services.AddRouting(option =>
                        {
                            option.ConstraintMap.Add(key: "transformer1", value: typeof(CustomUrlTransformer));
                            option.LowercaseUrls = true;
                        });
        }
سپس باید قالب مسیریابی را نیز به صورت زیر تغییر دهیم و کلید ConstraintMap اضافه شده‌ی فوق را به اجزای آن اضافه کنیم:
namespace MvcTest
{
    public class Startup
    {
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
    // ...
            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller:transformer1}/{action:transformer1}/{id?}",
                    defaults: new { controller = "Home", action = "Index" }
                    );
            });
        }
که template و defaults آن را به صورت خلاصه‌ی زیر نیز می‌توان نوشت:
app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller:transformer1=Home}/{action:transformer1=Index}/{id?}"
    );
});
اکنون اگر برنامه را اجرا کنیم، اینبار URL تولیدی، بجای https://localhost:5001/Home/ViewDetails به صورت زیر رندر می‌شود:
https://localhost:5001/home/view-details

نظرات مطالب
تزریق وابستگی‌ها در ASP.NET Core - بخش 4 - طول حیات سرویس ها یا Service Lifetime

در متن آمده که  EF Core  به صورت پیش فرض ،  Db Context  را به صورت  Scoped  ثبت می‌کند. و نحوه تزریق از طریق سازنده کلاس‌ها است. از طرفی اگر درست متوجه شده باشم در مستندات ماکروسافت هشدار داده شده که این مدل طول حیات را نباید از طریق سازنده تزریق کرد.


When using a scoped service in a middleware, inject the service into the Invoke or InvokeAsync method. Don't inject via constructor injection because it forces the service to behave like a singleton. For more information, see Write custom ASP.NET Core middleware. 


همچنین شما گفتید که "سرویس‌های Scoped  در محدوده‌ی درخواست، مانند  Singleton عمل می‌کنند و شیء ساخته شده و وضعیت آن در  بین تمامی سرویس‌هایی  که به آن نیاز دارند، مشترک است. بنابراین باید به این نکته در هنگام تعریف سرویس به صورت  Scoped ، توجه داشته باشید."


در پروژه‌ای که روی آن کار میکنم (ASP.NET Core Razor Pages) یک کلاس validation هست که میخوام به عنوان یک سرویس به کلاس هر صفحه تزریق بشه. اگر امکانش هست توضیح بدید که بر اساس مواردی که در بالا آوردم و هدفی که دارم آیا بین حالات singleton و scoped فرقی وجود دارد؟

ممنون.

مسیرراه‌ها
+AngularJS 2.0
شروع به کار با AngularJS 2.0 و TypeScript
فرم‌های مبتنی بر قالب‌ها در Angular
Angular Animation
آپلود فایل
Angular Material 6x
  • ابزارهای توسعه
نظرات مطالب
Angular Material 6x - قسمت اول - افزودن آن به برنامه
یکسری از وابستگی‌هایی که دارید با هم سازگاری ندارند (فایل zip انتهای بحث را دریافت کنید و شماره نگارش‌های package.json آن‌را با نمونه‌ی خودتان مقایسه کنید). برای مثال این بحث در مورد Angular 6x است و شما angular-cli نگارش 1.0.0 آن هم beta.28.3 را استفاده می‌کنید.
  "devDependencies": {
    "angular-cli": "1.0.0-beta.28.3",
راه حل: قسمت « به روز رسانی Angular CLI » را پیگیری کنید (هیچ راه حل دیگری هم ندارد. هر دو قسمت «الف) به روز رسانی بسته‌ی عمومی نصب شده‌ی آن » و «ب) به روز رسانی یک برنامه‌ی محلی» را باید انجام دهید).ضمنا در نظرات آن مطلب، نکات تکمیلی مهمی هم وجود دارند که بد نیست با آن‌ها آشنا شوید؛ مانند روش به روز رسانی یکجای وابستگی‌های سراسری سیستم و یا روش یافتن نگارش‌های جدید بسته‌های یک فایل package.json قدیمی.
اشتراک‌ها
Flux چیست ؟

Flux is an architecture for creating data layers in JavaScript applications. It was designed at Facebook along with the React view library. It places a focus on creating explicit and understandable update paths for your application's data, which makes tracing changes during development simpler and makes bugs easier to track down and fix. 

Flux چیست ؟
اشتراک‌ها
کتاب رایگان Entity Framework Code First Succinctly

Introduction
Chapter 1 Setting Up
Chapter 2 Domain Model
Chapter 3 Database
Chapter 4 Getting Data from the Database
Chapter 5 Writing Data to the Database
Chapter 6 Spatial Data Types
Chapter 7 Handling Events
Chapter 8 Extending Entity Framework
Chapter 9 Exposing Data to the World
Chapter 10 Tracing and Profiling
Chapter 11 Performance Optimizations
Chapter 12 Common Pitfalls

کتاب رایگان Entity Framework Code First Succinctly
نظرات مطالب
EF Code First #12
- Context زمانی تشکیل خواهد شد که کار وهله سازی کنترلر متناظر و موجودی با موفقیت انجام شده باشد.
+ زمانیکه runAllManagedModulesForAllRequests در وب کانفیگ به true تنظیم شده تمام درخواست‌ها به موتور ASP.NET نگاشت می‌شوند. می‌شود این وضعیت را کنترل کرد؛ مراجعه کنید به قسمت « تنظیمات ثانویه پس از فعال سازی RouteExistingFiles»
در کل تهیه یک برنامه ASP.NET MVC نیاز به رعایت یک سری موارد دارد که پیشتر در این سایت بحث شده: «چک لیست تهیه یک برنامه ASP.NET MVC». یکی از نکات آن هم «پوشه‌های Content و Scripts از سیستم مسیریابی تعریف شده در Global.asax خارج شوند» است.