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之后手动设置值)