سؤال

By injecting values ​​into my domain object, I would keep the values ​​of some properties.

Example:

Domain model

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; }
}

View Model

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
}

Sample

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
هل كانت مفيدة؟

المحلول

if you delete the set; from from the ViewModel's ID then it won't be set;

otherwise you could save the value of ID in a separate variable and put it back after injecting,

or you can create a custom valueinjection that would ignore "ID" or would receive a list of properties to ignore as a parameter


here's the example for a custom injection that receives a list of property names to ignore:

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;
    }
}

and use it like this:

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

if you need to ignore more, you can do like this:

pvm.InjectFrom(new MyInj("ID","Prop2","Prop3"), p); 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top