‫۲ سال و ۳ ماه قبل، سه‌شنبه ۲۷ اردیبهشت ۱۴۰۱، ساعت ۰۰:۲۶
نمی‌توان. چون در اصل Action و Func به این صورت تعریف شده‌اند:
public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2);
public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2);
البته می‌توان بجای Action و Func، یک delegate سفارشی را از صفر نوشت؛ ولی هدف در اینجا سهولت استفاده‌است.
+ از زمان C# 7.0 اگر نیاز به نامگذاری این پارامترها را داشتید، می‌توانید از tuples به صورت زیر استفاده کنید:
Func<(string firstName, string lastName), string> f = (data) => data.firstName + data.lastName;
f(("Foo", "Bar"));
‫۲ سال و ۳ ماه قبل، چهارشنبه ۱۴ اردیبهشت ۱۴۰۱، ساعت ۲۲:۱۰
یک نمونه طراحی تمام پلی‌مرفیک: laravel.io


در این طراحی هرجائی «able» وجود دارد، یعنی پلی‌مرفیک است؛ مانند likeable_id و likeable_type. برای مثال اگر به جدول threads (موضوعات)و replies (پاسخ‌ها) دقت کنیم، در جدول پاسخ‌ها، thread_id قابل مشاهده نیست و بجای آن replyable_id و replyable_type تعریف شده‌اند. به این معنا که جدول replies، تنها مختص به threads نیست؛ بلکه می‌تواند جهت نگهداری پاسخ‌های جداول دیگر نیز مورد استفاده قرار گیرد. همینطور در مورد نگهداری likeها عمل شده‌است که می‌تواند جهت نگهداری likeهای مقالات، موضوعات و پاسخ‌ها مورد استفاده قرار گیرد.
‫۲ سال و ۴ ماه قبل، دوشنبه ۱۲ اردیبهشت ۱۴۰۱، ساعت ۰۱:۴۲
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap کار بازنویسی و تغییر claims دریافت شده را انجام می‌دهد. به این صورت sub تبدیل به ClaimTypes.NameIdentifier  می‌شود (همان نکته‌ای که در ابتدای مطلب عنوان شد؛ اطلاعات بیشتر).
- یک authorization server هست؛ یک UI هست برای Identity server.  
-  authorization server یک لایه نیست. قرار نیست جزئی از برنامه‌ی شما باشد. یک برنامه‌ی کاملا «مستقل» هست. هدف اصلی آن هم همین مستقل بودن و نقش تامین هویت مرکزی را بازی کردن هست و گرنه اگر قرار باشد این‌ها با هم یکی شوند، شاید بهتر باشد از ASP.NET Core Identity استفاده کنید. 
- این روش برای شرکتی طراحی شده که یک برنامه‌ی حسابداری دارد، یک برنامه‌ی مجزای منابع انسانی و مدیریت کارمندان، یک برنامه‌ی مجزای مالی و حقوق و دستمزد، یک برنامه‌ی مجزای حضور و غیاب، یک برنامه‌ی مجزای اعلانات شرکت و غیره. هر کدام از این برنامه‌ها هم یک دیتابیس مستقل دارند و قرار نیست تعاریف کاربران و اطلاعات و نقش‌های آن‌ها در بانک‌های اطلاعاتی هر کدام از این برنامه‌ها تکرار شوند. اینجا است که «برنامه‌ی مستقل» authorization server مرکزی معنا پیدا می‌کند.
‫۲ سال و ۴ ماه قبل، چهارشنبه ۷ اردیبهشت ۱۴۰۱، ساعت ۱۳:۲۱
ساده شدن امکان تعریف ایندکس‌ها با Attributes از EF-Core 5x

ویژگی جدید Index که در اسمبلی Microsoft.EntityFrameworkCore.Abstractions واقع شده‌است، امکان تعریف انواع و اقسام ایندکس‌ها را میسر می‌کند. این ویژگی باید به خود کلاس اعمال شود و نه تک تک خواص. چند مثال:
الف) تعریف ایندکس بر روی خاصیت Url یک کلاس
[Index(nameof(Url))]
public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}
که امکان تعریف نام سفارشی آن نیز میسر است:
[Index(nameof(Url), Name = "Index_Url")]

ب) ایندکس‌های ترکیبی
[Index(nameof(FirstName), nameof(LastName))]
public class Person
{
    public int PersonId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

ج) ایندکس‌های منحصربفرد
[Index(nameof(Url), IsUnique = true)]
public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}
‫۲ سال و ۴ ماه قبل، دوشنبه ۵ اردیبهشت ۱۴۰۱، ساعت ۲۲:۱۷
زمانیکه یک سرویس با طول عمر Scoped ایجاد می‌شود، هر سرویس Transient ای که به همراه آن و در طول عمر آن درخواست شود، همان طول عمر Scoped را پیدا می‌کند و نه کمتر از آن. Transient به معنای طول عمر کوتاه نیست. به معنای هربار که به آن نیاز است و تزریق شده، مجددا نمونه سازی شود، هست. برای درک بهتر مدیریت طول عمر آن، «روش صحیح Dispose اشیایی با طول عمر Scoped، در خارج از طول عمر یک درخواست ASP.NET Core» را مطالعه کنید.