Я создаю веб-API, который будет называть сервисный уровень, и я пытаюсь изучить Dependency Injection (я надеюсь использовать ninject), но я не уверен, как создать зависимость от службы слой.Инъекция зависимостей уровня сервиса
Это то, что позвонил веб-ави.
Вот вопросы, при вызове IPersonService, человек будет иметь пол определен, то он будет иметь имя, роль и этническую принадлежность. Я использую инсталляцию конструктора и не уверен, следует ли мне вызвать службу GenderService или я должен называть бизнес-уровень (в данном случае определяемый Core).
Должен ли я называть услугу, как на картинке выше, или ниже
Это то, что мой служащему выглядеть
namespace Service.Services
{
public class PersonService : IPersonService
{
private IPersonCore personCore = null;
private INameService nameService = null;
private IRoleService roleService = null;
private IGenderService genderService = null;
private IEthnicityService ethnicityService = null;
private IPrefixService prefixService = null;
private Person currUser;
public PersonService(IPersonCore _personcore, INameService _namecore, IRoleService _roleservice, IGenderService _genderservice, IEthnicityService _ethnicityservice, IPrefixService _prefixservice)
{
this.personCore = _personcore;
this.nameService = _namecore;
this.roleService = _roleservice;
this.genderService = _genderservice;
this.ethnicityService = _ethnicityservice;
this.prefixService = _prefixservice;
}
public IEnumerable<Person> GetAllPerson()
{
if (isAuthorized())
{
return this.personCore.GetPersons();
}
return null;
}
public Person GetPersonByID(int id)
{
if (isAuthorized())
{
return this.personCore.GetPersonByID(id);
}
return null;
}
public Person GetPersonByEmail(string email)
{
if (isAuthorized())
{
return this.personCore.GetPersonByEmail(email);
}
return null;
}
public IEnumerable<Person> GetPersonByName(string first, string last, string middle)
{
if(isAuthorized())
{
Name newname = this.nameService.CreateName(first, last, middle);
return this.personCore.GetPersonByName(newname);
}
return null;
}
public IEnumerable<Person> GetPersonWithRoles(IEnumerable<Roles> r)
{
}
public IEnumerable<Person> GetPersonWithDOB(DateTime d)
{
if (isAuthorized())
{
return this.personCore.GetPersonWithDOB(d);
}
return null;
}
public Person SetPersonRole(int id, Roles r)
{
}
public Person SetGender(int id, Gender g)
{
}
public Person SetEthnicity(int id, Ethnicity e)
{
}
public Person SetPrefix(int id, Prefix p)
{
}
public Person CreatePerson(Person p)
{
if (isAuthorized())
{
return personCore.AddPerson(p);
}
return null;
}
public Person UpdatePerson(Person p)
{
if (isAuthorized())
{
return personCore.UpdatePerson(p);
}
return null;
}
public Person ActivatePerson(int id)
{
if (isAuthorized())
{
return personCore.ActivatePerson(id);
}
return null;
}
public Person DeactivatePerson(int id)
{
if (isAuthorized())
{
return personCore.DeactivatePerson(id);
}
return null;
}
public bool DeletePerson(int id)
{
if (isAuthorized())
{
return personCore.DeletePerson(id);
}
return false;
}
protected bool isAuthorized()
{
//Probably move to common
return true;
}
}
}
При вызове из Веб-API, мой вопрос с ним, является его звуком, как много зависимости от поиска чего-то определенного человека.
Благодарим вас, что с точки зрения пользователя, Personervice должен возвращать базовый идентификатор, пароль, электронную почту, но роли, полы должны быть только для genderService, и обе службы никогда не должны разговаривать друг с другом ? – Jseb
@ Jseb: Это не то, что я продвигаю. То, что я продвигаю, - это модель, в которой каждый запрос (например, «GetAllPerson' и« GetPersonByEmail ») содержится в собственном классе. Такой класс может принимать зависимости от того, что ему нужно, но в большинстве случаев просто использовал бы 'DbContext' для запроса базы данных. – Steven