دسته بندی ها
11:30 1403/04/13

خطای An object reference is required for the non-static field در AutoMapper

مشخصات سوال کننده :
کاربر : avalipour5     امتیاز کاربر : ‎−1     رتبه کاربر : 7079
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 830
1 نظر
saedbfd : لطفا متن خطا رو قرار بدید.

امتیاز کاربر : 1664   رتبه کاربر : 1   تاریخ ثبت : 02:58 1403/04/13
هوش مصنوعی

پاسخ هوش مصنوعی

خطای "An object reference is required for the non-static field" معمولاً در حالتی رخ می دهد که شما سعی دارید به یک ویژگی یا متد غیر استاتیک از طریق یک کلاس استاتیک یا بدون ارجاع به یک شیء از آن کلاس دسترسی پیدا کنید.

برای رفع این خطا در AutoMapper، باید اطمینان حاصل کنید که از یک شیء واقعی از Mapper استفاده می کنید. به عنوان مثال، اگر شما Mapper را به صورت استاتیک اعلام کرده اید، می بایست آن را به صورت یک شیء معمولی ایجاد و استفاده کنید.

در زیر نمونه کدی برای ایجاد یک شیء از Mapper و استفاده از آن ارایه می شود:

using AutoMapper;

public class BookController : Controller
{
    private readonly IMapper _mapper;

    public BookController(IMapper mapper)
    {
        _mapper = mapper;
    }

    public IActionResult Create(AddEditBookViewModel model)
    {
        var book = _mapper.Map(model);
        // ادامه کد
    }
}

در این کد، از Dependency Injection برای تزریق Mapper استفاده شده است. اطمینان حاصل کنید که Mapper به درستی پیکربندی شده باشد و در هنگام ایجاد Controller، آن را به constructor بفرستید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : saedbfd 13:33 1403/04/15

شما باید یک نمونه از اینترفیس Mapper رو بالای کنترلر خودتون تعریف کنید و در Constructor مقداردهی کنید. نه اینکه مستقیما بیاید و از کلاس Mapper استفاده کنید. کد زیر رو نگاه کنید :

public class HomeController : Controller
{
   private readonly IMapper _mapper;
   public HomeController(IMapper mapper)
   {
      _mapper = mapper;
   }

	public IActionResult Index()
	{
        Book bookmodel = _mapper.Map<AddEditBookViewModel, Book>(model);
		return View();
	}
}

کد بالا رو تست کنید. ممکنه نیاز به تغییرات کوچکی هم داشته باشه ولی روش کلی این هست که نوشتم.

به این پاسخ امتیاز بدهید    0
امتیاز: 1664 رتبه: 1
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود