عدم پاسح webApi هنگام استفاده از لایه Service
سلام.
من تازه کار با WebApi رو شروع کردم.
دارم یک مقاله رو می خونم و طبق اون کار رو یاد میگیرم.
من در ابتدا از یک کنترلر استفاده کردم بصورت زیر
public class EmployeController : ApiController
{
public string[] Get()
{
return new string[]
{
"Hello",
"Nabi"
};
}
}
و جواب مناسب رو گرفتم.
اما وقتی میام و یک پوشه service می سازم و و کد ها رو وارد می کنم وقتی می خوام جواب بگیرم به ارور زیر بر می خورم.
ممنون میشم جوابی بدین.
public class ContactRepository
{
private const string CashKey = "ContactStrore";
public ContactRepository()
{
var ctx = HttpContext.Current;
if (ctx != null)
{
if (ctx.Cache[CashKey] == null)
{
var contacts = new Contact[]
{
new Contact
{
Id = 1, Name = "Glenn Block"
},
new Contact
{
Id = 2, Name = "Dan Roth"
}
};
ctx.Cache[CashKey] = contacts;
}
}
}
public Contact[] GetallContacts()
{
var ctx = HttpContext.Current;
if (ctx != null)
{
return (Contact[])ctx.Cache[CashKey];
}
return new Contact[]
{
new Contact
{
Id = 0,
Name = "Placeholder"
}
};
}
public bool SaveContact(Contact contact)
{
var ctx = HttpContext.Current;
if (ctx != null)
{
try
{
var currentData = ((Contact[])ctx.Cache[CashKey]).ToList();
currentData.Add(contact);
ctx.Cache[CashKey] = currentData.ToArray();
return true;
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return false;
}
}
return false;
}
}
این هم کنترلر API من
private ContactRepository _contact;
public ContactController(ContactRepository contact)
{
_contact = contact;
}
public Contact[] Get()
{
return this._contact.GetallContacts();
}
کد HTML:
This XML file does not appear to have any style information associated with it. The document tree is shown below. <Error><Message>An error has occurred.</Message><ExceptionMessage>An error occurred when trying to create a controller of type 'ContactController'. Make sure that the controller has a parameterless public constructor.</ExceptionMessage><ExceptionType>System.InvalidOperationException</ExceptionType><StackTrace> at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage request) at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()</StackTrace><InnerException><Message>An error has occurred.</Message><ExceptionMessage>Type 'TestApi.Web.Controllers.ContactController' does not have a default constructor</ExceptionMessage><ExceptionType>System.ArgumentException</ExceptionType><StackTrace> at System.Linq.Expressions.Expression.New(Type type) at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType) at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator) at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)</StackTrace></InnerException></Error>
نقل قول: عدم پاسح webApi هنگام استفاده از لایه Service
سلام دوست عزیز مشکل در تزریق وابستگی Repository شما می باشد این روش تزریق کاملا اشتباه می باشد تزریق وابستگی اولا توسط interface ها صورت می گیرد در ثانی توسط کتابخانه های مشخصی مثل autofac
نقل قول: عدم پاسح webApi هنگام استفاده از لایه Service
ممنون.
اما به خاطر این نیست. من همیشه دارم از تزریق وابستگی با اینترفیس و ninject کار می کنم. این کد هام طبق مثال کتاب اما نمی دونم چرا جواب نمیده.
موفق باشید
نقل قول: عدم پاسح webApi هنگام استفاده از لایه Service
زبون بسته خودش داره میگه مشکلت چیه:
An error occurred when trying to create a controller of type 'ContactController'. Make sure that the controller has a parameterless public constructor
داره میگه شما Constructor بدون پارامتر باید داشته باشید (که در کلاس فوق ندارید).
نقل قول: عدم پاسح webApi هنگام استفاده از لایه Service
واقعا ممنون استاد. دقت نکرده بودم :لبخند:
این خط باید اضافه میشد
public ContactController()
{
this._contact = new ContactRepository();
}
نقل قول: عدم پاسح webApi هنگام استفاده از لایه Service
نقل قول:
نوشته شده توسط
r4hgozar
ممنون.
اما به خاطر این نیست. من همیشه دارم از تزریق وابستگی با اینترفیس و ninject کار می کنم. این کد هام طبق مثال کتاب اما نمی دونم چرا جواب نمیده.
موفق باشید
مشکل در تزریق وابستگی ای است که شما انجام داده اید. درست است که متن خطا میگه باید سازنده بدون پارامتر داشته باشید ولی در اصل اگر هدف شما تزریق وابستگی بود شما به این هدف نرسیدید و همینطور که مشخص است صورت مسله را عوض کردید.
نقل قول: عدم پاسح webApi هنگام استفاده از لایه Service
Ninject در نسخه های جدیدش برای تزریق وابستگی درون Web Api نیاز به دو افزونه Ninject Web Api و Ninject WebApi WebHost داره (اگر جستجو کنید در Nuget هست) اینها رو به پروژه اضافه کنید.
نقل قول: عدم پاسح webApi هنگام استفاده از لایه Service
نقل قول:
نوشته شده توسط
hakim22
Ninject در نسخه های جدیدش برای تزریق وابستگی درون Web Api نیاز به دو افزونه Ninject Web Api و Ninject WebApi WebHost داره (اگر جستجو کنید در Nuget هست) اینها رو به پروژه اضافه کنید.
سلام.
Ninject Web Api رو می دونستم و نصب کردم اما Ninject WebApi WebHost رو نمی دونستم.
ممنون.