Предположим, у меня есть класс User, который частично заполнен ORM, но есть некоторые части данных, которые логически связаны с этой сущностью, которые предоставляются из других источников.Поведение Инъекция в сущность или лучший способ?
public class User {
public int Id { get; set; }
public int ServiceId { get; set; }
public string FirstName => null; //this comes from somewhere else
public ICollection<Role> Roles { get; set; }
//etc...
}
Ранее, в случаях, подобных этому, я был позволяя один интерфейс, который будет введен в модель домена контейнером МОК справиться с этим.
public class User {
public readonly IUserBehavior _userBehavior;
public User() {}
public User(IUserBehavior userBehavior) {
_userBehavior = userBehavior;
}
public int Id { get; set; }
public int ServiceId { get; set; }
public string FirstName => _behavior?.getFirstName(this);
public ICollection<Role> Roles { get; set; }
//etc...
}
я недавно, однако, пытался переход от NHibernate к Entity Framework, который выглядит сделать это невозможно (по крайней мере, в той мере, с помощью инъекции конструктора).
Мои параметры сейчас представляют собой перемещение служебного вызова (детали реализации) для получения отсутствующих данных непосредственно в сущности или использования двойного шаблона отправки, который кажется скорее выключенным ... Некоторые свойства данных этого типа будут иметь чтобы быть вызванным особым образом. Если бы это выполняло действие для изменения состояния, я мог видеть, что двойная диспетчеризация имеет больше смысла. В качестве альтернативы, я полагаю, я мог бы вернуться к nHibernate.
Я предполагаю, что я спрашиваю, есть ли какие-либо из моих опций на самом деле «хорошие», или есть какой-то другой вариант, который я должен рассмотреть?
Дубликат https://stackoverflow.com/questions/28715966/entity-framework-object-materialization-and-dependency-injection? – Steven
@Steven Пила этот вопрос, прежде чем я написал этот. Кажется, предполагает двойную отправку, что, как я сказал, кажется странным для моего случая использования. – Ixonal
Я не вижу, как это связано с двойной отправкой, за исключением случаев, когда вы начинаете публикацию событий, что кажется не связанным с вашим вопросом. – Steven