Как сохранить значение источника при использовании InjectFrom - PullRequest
1 голос
/ 14 февраля 2012

Внедрив значения в мой объект домена, я бы сохранил значения некоторых свойств.

Пример:

Модель домена

public class Person
{
    public string Name { get; set; }
    public Guid ID { get; set; }
    public DateTime CreateAt { get; set; }
    public string Notes { get; set; }
    public IList<string> Tags { get; set; }
}

Просмотр модели

public class PersonViewMode
{
    public string Name { get; set; }
    public Guid ID { get; set; }
    public DateTime CreateAt { get; set; }
    public string Notes { get; set; }
    public IList<string> Tags { get; set; }

    public PersonViewMode() { ID = Guid.NewGuid(); } //You should use this value when it is the Target
}

Образец

var p = new Person
            {
                ID = Guid.NewGuid() //Should be ignored!
                ,
                Name = "Riderman"
                ,
                CreateAt = DateTime.Now
                ,
                Notes = "teste de nota"
                ,
                Tags = new[] {"Tag1", "Tag2", "Tag3"}
            };

var pvm = new PersonViewMode();

pvm.InjectFrom(p); //Should use the ID value generated in the class constructor PersonViewMode

1 Ответ

1 голос
/ 14 февраля 2012

если вы удалите set; из идентификатора ViewModel, тогда он не будет установлен;

в противном случае вы можете сохранить значение идентификатора в отдельной переменной и вернуть его после введения,

или вы можете создать пользовательскую инъекцию значения, которая будет игнорировать "ID" или получит список свойств, которые будут игнорироваться в качестве параметра


вот пример для пользовательской инъекции, которая получает список имен свойств, которые следует игнорировать:

public class MyInj : ConventionInjection
{
    private readonly string[] ignores = new string[] { };

    public MyInj(params string[] ignores)
    {
        this.ignores = ignores;
    }

    protected override bool Match(ConventionInfo c)
    {
        if (ignores.Contains(c.SourceProp.Name)) return false;
        return c.SourceProp.Name == c.TargetProp.Name && c.SourceProp.Type == c.TargetProp.Type;
    }
}

и используйте его так:

pvm.InjectFrom(new MyInj("ID"), p);

если вам нужно игнорировать больше, вы можете сделать так:

pvm.InjectFrom(new MyInj("ID","Prop2","Prop3"), p); 
...