مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

pe2131

عضویت از 1394/08/29

اینجکت کردن یک کنترلر به کنترلر دیگر

  • چهارشنبه 1 خرداد 1398
  • 13:48
تشکر میکنم

با سلام و عرض وقت بخیر خدمت دوستان عزیز میخواستم ببینم راهی هست که بتونیم یک کنترلر رو که حاوی یه سری پارمتر در کانستراکتورش هست به کنترلر دیگه اینجکت کنیم؟

من وقتی این کار رو میکنم با این ارور مواجه میشم 

InvalidOperationException: Multiple constructors accepting all given argument types have been found in type 'Booking_Web.Controllers.ReservationController'. There should only be one applicable constructor.

 

ممنون میشم اگه راه حلی دارید کمکم کنید 

پاسخ های این پرسش

تعداد پاسخ ها : 4 پاسخ
کاربر سایت

salman_b

عضویت از 1396/02/18

  • چهارشنبه 1 خرداد 1398
  • 15:09

سلام

که چی بشه ؟

اگه به اکشن خاصی از اون کنترلر نیاز داری که به راحتی redirect کن.

اگه به متد خاصی نیاز داری اون متد رو بیار بیرون از کنترلر و از اونجا صداش بزن.

چه دلیلی داره که کنترلری به عنوان ورودی کنترلر دیگه‌ای باشه؟!

و اینکه این خطا مربوط به تنظیمات IOC هستش که میگه بیش از یک سازنده داره از کنترلر Reservation داره پیدا میکنه که این ورودی‌ها رو میتونه بهش بده!

کاربر سایت

AmirGhasemi

عضویت از 1392/02/25

  • شنبه 4 خرداد 1398
  • 08:47

سلام

این که خب تقریبا کاری 100 در 100 اشتباه است

شما باید بیزینس را در یک سرویس دیگه بنویسی و این سرویس را در کنترلر دومت استفاده کنی

کاربر سایت

pe2131

عضویت از 1394/08/29

  • شنبه 11 خرداد 1398
  • 14:05

این که میفرمایید متد رو بیارم بیرون کنترلر یعنی توی یه کلاس جدا بزارمش؟

کاربر سایت

salman_b

عضویت از 1396/02/18

  • یکشنبه 12 خرداد 1398
  • 08:50

بله

شما یک interface تعریف میکنی که میشه اون قراردادی که بهش در داخل کنترلر نیاز داری.

بعد یه class میسازی که این interface رو پیاده‌سازی می‌کنه.

بعد این class رو برای IOC تنظیم می‌کنی تا هرجا اون interface تزریق شده بود از این class یه شی ایجاد کنه و به مقصد تزریق کنه. و شما هم فقط با همون interface که از اول قرارداد کردی کار می‌کنی.

این راه درست است.

اما اگه چیزی راجع به IOC و اینها نمیدونی و نمی‌خوای هم یاد بگیری میتونی از interface صرف نظر کنی و مستقیما class رو داخل کنترلر new و استفاده کنی.

موفق باشی.

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)