در بخش پنجم از سری نوشتار « تزریق وابستگیها در ASP.NET Core »، میخواهیم به شرح کلاس ServiceDescriptor بپردازیم. اگر تعریف اینترفیس IServiceCollection را
مشاهده کنیم، میبینیم که IServicecollection در
واقع لیستی از اشیائی از نوع ServiceDescriptor را نگهداری میکند: namespace Microsoft.Extensions.DependencyInjection
{
public interface IServiceCollection :
ICollection&l ...
در قسمتهای قبلی این سری، به ترتیب ابتدا در مورد مبحث تزریق وابستگیها صبحت کردیم، بعد اولین سرویسمان را در ASP.NET Core ثبت و واکشی کردیم. در بخش سوم، تنظیمات را درون سامانه، ثبت و استفاده کردیم و حالا در این بخش میخواهیم به مبحث طول حیات سرویسها بپردازیم. همانطور که گفتیم، وظیفهی DI Container، ایجاد یک نمونه از سرویس درخواست شده، تزریق آن به کلاس درخواست دهنده و در انتها از بین بردن یا Dispose شیء ایجاد شده از سرویس ثبت شدهاست ...
یک پروژهی ASP.NET Core را با قرار دادن نسخهی NET Core. بر روی 3.1 و با استفاده از قالب Model View Controller ایجاد کنید. در اینجا نام پروژه را AspNetCoreDependencyInjection گذاشتهام. حالا در پوشهی Models، فایلی را با نام HomeViewModel.cs با محتویاتی به صورت زیر اضافه کنید: public class HomeViewModel
{
public string Id { get; set; }
public string Message { get; set; }
public DateTime DateTime { get; set; } ...
مقدمه
زمانیکه یک برنامه را بر پایهی شیء گرایی طراحی میکنید و مینویسید، به صورت معمول جریان وابستگیها در برنامهی شما به صورت زیر است:
در این حالت برای کامپایل شدن برنامه نیاز است که فرآیند کامپایل از دورترین کلاس و متد شروع شود. همانطور که میبینید در اینجا هر کلاس به تمام زیر کلاسهای خود وابسته است و هر تغییر در هر کدام از کلاسهای خدمتگزار میتواند تاثیرات مستقیمی بر روی سایر ...
یکی از اهداف کار با ORMها، رسیدن به کدی قابل ترجمه و استفادهی توسط تمام بانکهای اطلاعاتی ممکن است و یکی از الزامات رسیدن به این هدف، صرفنظر کردن از قابلیتهای بومی بانکهای اطلاعاتی است که در سایر بانکهای اطلاعاتی دیگر معادلی ندارند. برای مثال SQL Server به همراه توابع توکاری مانند datediff و datepart برای کار با زمان و تاریخ است؛ اما این توابع را به صورت مستقیم نمیتوان در ORMها استفاده کرد. چون به محض استفادهی از آنها، کد تهیه شده د ...
اگر بخواهیم یک Attribute سفارشی را برای اعتبارسنجی ایجاد کنیم، معمولا یک کلاس را ایجاد کرده و از ValidationAttribute ارث بری میکنیم و سپس متد IsValid آنرا override میکنیم؛ با توجه به نیازی که به آن Attribute داریم. به عنوان مثال در ادامه یک Attribute را ایجاد کردهایم که عمل مقایسهی دو خاصیت را انجام میدهد و اگر مقدار خاصیتی که ویژگی LowerThan بر روی آن قرار دارد، از مقدار خاصیت دیگری که باید با آن مقایسه شود، کمتر نباشد، یک خطا را به M ...
فرض کنید کاربری برای جستجوی رکورد زیر: context.Chapters.Add(new Chapter
{
Title = "آزمایش متن فارسی",
Text = "برای نمونه تهیه شدهاست",
User = user1.Entity
});
بجای «فارسی»، واژهی «فارشی» را وارد کند و یا بجای «آزمایش»، بنویسد «آزمایس». در هر دو حالت نتیجهی جستجوی او خروجی را به همراه نخواهد داشت. برای بهبود تجربهی کاربری جستجوی تمام متنی SQLite، افزونهای به نام spell fix1 برای آن تهیه شدهاست که بر اس ...
گاهی نیاز هست در بین propertyهای modelهای مختلفی که از یک مدل base ارث بری کرده اند، جستجویی را انجام دهیم؛ همانند مدل زیر: #region my model
[KnownType(typeof(model1))]
[KnownType(typeof(model2))]
[KnownType(typeof(model3))]
public class TaskGroupObjects : List<IBaseObject>
{
#region sortFields
class compare : IComparer<IBaseObject>
{
publ ...
پس از آشنایی با نحوهی ایجاد و به روز رسانی جدول مجازی FTS، اکنون قصد داریم با روشهای کوئری گرفتن از آن آشنا شویم. برای این منظور در ابتدا نیاز است تعدادی رکورد را در آن ثبت کنیم: private static void seedDb(ApplicationDbContext context)
{
if (!context.Chapters.Any())
{
var user1 = context.Users.Add(new User { Name = "Test User" });
context.Chapters.Add ...