۵ سال و ۱ ماه قبل، یکشنبه ۲۷ مرداد ۱۳۹۸، ساعت ۰۰:۲۹
۵ سال و ۱ ماه قبل، یکشنبه ۲۷ مرداد ۱۳۹۸، ساعت ۰۰:۲۸
ارتقاء به ASP.NET Core 3.0: محدود شدن امکان تزریق وابستگیها در سازندهی کلاس آغازین برنامه
یکی از تغییرات مهم ASP.NET Core 3.0 نسبت به نگارشهای قبلی، جنریک شدن Host آن است (چون حالتهای هاستینگ بیشتری را نسبت به حالت صرف MVC پشتیبانی میکند). به این ترتیب HostBuilder نگارش 2x:
اکنون در نگارش 3x به این صورت در آمدهاست:
این مورد، یک تغییر مهم را هم در وضعیت تزریق وابستگیهای سفارشی در کلاس آغازین برنامه ایجاد کردهاست: در نگارش 3x، فقط و فقط سرویسهای IHostEnvironment ،IWebHostEnvironment و IConfiguration را میتوانید به سازندهی کلاس آغازین آن تزریق کنید.
علت اینجا است که در ASP.NET Core 3x، یک باگ بسیار مهم سیستم تزریق وابستگیهای ASP.NET Core برطرف شدهاست: اکنون فقط یک dependency injection container به ازای کل برنامهی ASP.NET Core 3x ساخته میشود. در نگارشهای قبلی، یک container برای برنامه و یک container مجزا برای host تولید میشدند. در این حالت اگر یک سرویس Singleton را در فایل program.cs معرفی میکردید:
برخلاف تصور، این سرویس Singleton رفتار نمیکرد؛ چون همانطور که عنوان شد، دو container، برنامه را مدیریت میکردند (یعنی دوبار توسط دو ظرف متفاوت نگهدارندهی اشیاء، وهله سازی میشد) که اکنون در نگارش 3x به یک مورد کاهش یافتهاست.
در اینجا هرچند متد ConfigureServices وجود دارد، اما اگر از آن استفاده کنید، سرویس معرفی شدهی توسط آن، در سازندهی کلاس Startup شناسایی نمیشود.
یکی از تغییرات مهم ASP.NET Core 3.0 نسبت به نگارشهای قبلی، جنریک شدن Host آن است (چون حالتهای هاستینگ بیشتری را نسبت به حالت صرف MVC پشتیبانی میکند). به این ترتیب HostBuilder نگارش 2x:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>();
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
علت اینجا است که در ASP.NET Core 3x، یک باگ بسیار مهم سیستم تزریق وابستگیهای ASP.NET Core برطرف شدهاست: اکنون فقط یک dependency injection container به ازای کل برنامهی ASP.NET Core 3x ساخته میشود. در نگارشهای قبلی، یک container برای برنامه و یک container مجزا برای host تولید میشدند. در این حالت اگر یک سرویس Singleton را در فایل program.cs معرفی میکردید:
WebHost.CreateDefaultBuilder() .UseStartup<Startup>() .ConfigureServices(services => services.AddSingleton<MySingleton>()) .Build() .Run();
در اینجا هرچند متد ConfigureServices وجود دارد، اما اگر از آن استفاده کنید، سرویس معرفی شدهی توسط آن، در سازندهی کلاس Startup شناسایی نمیشود.
۵ سال و ۱ ماه قبل، شنبه ۲۶ مرداد ۱۳۹۸، ساعت ۲۰:۰۱
به روز رسانی
Code Contacts دیگر توسط مایکروسافت پشتیبانی نمیشود. بیشترین استفادهی از آن، بررسی نال بوده و برای این مورد پیشنهاد میشود که از امکانات C# 8.0 استفاده شود.
۵ سال و ۱ ماه قبل، شنبه ۲۶ مرداد ۱۳۹۸، ساعت ۰۰:۴۸
مسیر signin-google/، یک مسیر پیشفرض هست که توسط متد ()AddGoogle، تنظیم و مدیریت میشود. اگر 404 دریافت میکنید احتمالا یا این متد و یا متد ()app.UseAuthentication را فراخوانی نکردهاید.
۵ سال و ۱ ماه قبل، جمعه ۲۵ مرداد ۱۳۹۸، ساعت ۱۴:۲۷
ارتقاء به ASP.NET Core 3.0
اگر در تنظیمات web.config خود، سطر زیر را در مورد تنظیم AspNetCoreModule دارید:
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
<AspNetCoreModuleName>AspNetCoreModule</AspNetCoreModuleName>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified"/>
۵ سال و ۱ ماه قبل، جمعه ۲۵ مرداد ۱۳۹۸، ساعت ۱۴:۱۹
ارتقاء به ASP.NET Core 3.0
API قدیمی تنظیمات کوکیهای سشن:
public void ConfigureServices(ServiceCollection services) { services.AddSession(options => { // Removed obsolete APIs options.CookieName = "SessionCookie"; options.CookieDomain = "contoso.com"; options.CookiePath = "/"; options.CookieHttpOnly = true; options.CookieSecure = CookieSecurePolicy.Always; }); }
public void ConfigureServices(ServiceCollection services) { services.AddSession(options => { // new API options.Cookie.Name = "SessionCookie"; options.Cookie.Domain = "contoso.com"; options.Cookie.Path = "/"; options.Cookie.HttpOnly = true; options.Cookie.SecurePolicy = CookieSecurePolicy.Always; }); }
۵ سال و ۱ ماه قبل، جمعه ۲۵ مرداد ۱۳۹۸، ساعت ۱۲:۵۵
۵ سال و ۱ ماه قبل، جمعه ۲۵ مرداد ۱۳۹۸، ساعت ۱۲:۵۳
ارتقاء به ASP.NET Core 3.0
در ASP.NET Core نیز نکات کلی نوشتن ActionResultها برقرار است. فقط پیشتر اگر قطعه کد زیر در متد ExecuteResult نگارش 2.2 کار میکرد:
اکنون در نگارش 3x این استثناء را صادر میکند:
Response.Body.Write
System.InvalidOperationException: Synchronous operations are disallowed. Call WriteAsync or set AllowSynchronousIO to true instead.
۵ سال و ۱ ماه قبل، پنجشنبه ۲۴ مرداد ۱۳۹۸، ساعت ۲۳:۳۱
یک نکتهی تکمیلی
برای پشتیبانی چند تقویم با هم این پروژه را هم مدنظر داشته باشید « JDNConvertibleCalendarDateAdapter ».
۵ سال و ۱ ماه قبل، پنجشنبه ۲۴ مرداد ۱۳۹۸، ساعت ۱۹:۰۷
ارتقاء به ASP.NET Core 3.0
نام بستهی npm سمت کلاینت مخصوص SignalR Core که در ابتدا aspnet/signalr-client@ بود و بعد شد aspnet/signalr@، از این پس microsoft/signalr@ شدهاست!
npm install @microsoft/signalr --save