考虑我有以下课程:
class Destination
{
public int Id { get; set; }
public Child MyChild { get; set; }
}
class Child
{
public string Name { get; set; }
}
在我的Main()方法中:
Child MyChild = new Child() { Name = "Tom" };
Destination dest = new Destination() { Id = 101 };
dest.InjectFrom(MyChild); // THIS DOESN'T INJECT AND ASSIGN THE OBJECT TO THE Destination.MyChild property.
所以我希望将对象分别映射/注入目标属性。有人可以指导我。
答案 0 :(得分:0)
ValueInjecter项目只是一种映射项目。 InjectFrom从源对象获取属性并将它们注入目标对象。
我想要的是对象本身......
我相信你想要一个浅/深的原型副本。否则你应该注入实例......
您可以实现一些ValueInjecter API来解决您的问题,但是,如果您这样做,那么您的模型将绑定到技术。你必须一遍又一遍地做。所以这似乎是一个坏主意。
我想为您提供另一种解决方案:
public static T InjectClone<T>(this T source)
{
//note: you have to implements HasCopyConstractor & HasDefualtConstractor...
if (source is ICloneable)
return (T) ((ICloneable) source).Clone();
var type = source.GetType();
if (HasCopyConstractor(type))
return (T) Activator.CreateInstance(type, source);
if (HasDefualtConstractor(type))
{
var target = (T) Activator.CreateInstance(source.GetType());
target.InjectFrom(source);
return target;
}
throw new exception.....
}
public static T InjectTo<T>(this T source, ref T target)
{
if (target == null)
{
target = source.InjectClone();
}
else
{
target.InjectFrom(source);
}
return source;
}
现在您可以通过以下方式实现目标:
dest.MyChild = MyChild.InjectClone();
如果dest.MyChild不是属性,则可以选择InjectTo:
MyChild.InjectTo(ref dest.MyChild);