Asp.net mvc 3 使用InjectFrom时如何保持源的值

Asp.net mvc 3 使用InjectFrom时如何保持源的值,asp.net-mvc-3,valueinjecter,Asp.net Mvc 3,Valueinjecter,通过注入值​​在我的域对象中,我将保留这些值​​某些属性的属性 例子: 域模型 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 {

通过注入值​​在我的域对象中,我将保留这些值​​某些属性的属性

例子: 域模型

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
}

如果删除
集合来自ViewModel的ID,则不会对其进行设置

否则您可以将ID的值保存在单独的变量中,并在注入后将其放回原处

或者,您可以创建一个自定义valueinjection,它将忽略“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); 
如果您需要忽略更多,可以这样做:

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

如果删除
集合来自ViewModel的ID,则不会对其进行设置

否则您可以将ID的值保存在单独的变量中,并在注入后将其放回原处

或者,您可以创建一个自定义valueinjection,它将忽略“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); 
如果您需要忽略更多,可以这样做:

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

请原谅我的无知,你能举个例子吗?你想要更自动化的(无需在注入后手动设置值)吗?对不起,我不知道,你能举个例子吗?您是否希望更自动化(无需在InjectFrom之后手动设置值)