Я мог бы упустить что-то очевидное здесь ...
Но, поскольку я учусь ценить славу IoC и инъекции ctor, у меня возникают проблемы с согласованием этого с сериализацией графов объектов.Совместимы ли эти две модели?Почему (или почему нет)?
Предположим, есть:
public class Foo
{
#region invariants
private readonly List<IBar> _bars;
private readonly Guid _id;
#endregion
public Foo( List<IBar> bars, Guid id )
{
_bars = bars.CannotBeNull("bars");
_id = id.CannotBeNull("id");
}
public List<IBar> Bars { get { return _bars; } }
//some other state I want serialized
}
public static class Ex
{
public static T CannotBeNull<T>( this T obj, string paramName = "" )
{
if ( null == obj ) throw new ArgumentNullException(paramName);
return obj;
}
}
Мне нравится железная оболочка для защиты инвариантов класса посредством инъекции ctor.Это дает моим объектам уверенность, что они всегда будут иметь то, что им нужно.Внедряется ли внедрение инвариантов в противоречие с шаблоном хранилища?Может быть, где-то есть слой DTO и фабричный шаблон, который устраняет разрыв ...?
Ищете мудрый совет ... Совместимы ли эти два шаблона?Почему (или почему нет)?
PS: я знаю о IDeserializationCallback, но не понимаю, как он помогает с инвариантами «только для чтения»