C# 用插值器展平
我尝试使用将多个对象映射到视图模型对象。但它并没有像我预期的那样起作用 代码:C# 用插值器展平,c#,valueinjecter,C#,Valueinjecter,我尝试使用将多个对象映射到视图模型对象。但它并没有像我预期的那样起作用 代码: class Call { public string Number { get; set; } public string CustomerNumber { get; set; } } class Operation { public int ID { get; set; } public string CallNumber { get; set; } public stri
class Call
{
public string Number { get; set; }
public string CustomerNumber { get; set; }
}
class Operation
{
public int ID { get; set; }
public string CallNumber { get; set; }
public string TimeFrom { get; set; }
}
class Customer
{
public string Number { get; set; }
public string Name { get; set; }
}
class CallViewModel
{
public string Number { get; set; }
public string CustomerName { get; set; }
public string OperationTimeFrom { get; set; }
}
class Test
{
static void Main(string[] args)
{
var call = new Call { Number = "001337", CustomerNumber = "000001" };
var op = new Operation { ID = 1, CallNumber = "001337", TimeFrom = "08:00" };
var customer = new Customer { Number = "000001", Name = "John Doe" };
var viewModel = new CallViewModel();
viewModel.InjectFrom(call, op, customer);
Console.WriteLine("Number:\t\t\t" + viewModel.Number);
Console.WriteLine("CustomerName:\t\t" + viewModel.CustomerName);
Console.WriteLine("OperationTimeFrom:\t" + viewModel.OperationTimeFrom);
Console.ReadLine();
}
}
Number: 001337
CustomerName: John Doe
OperationTimeFrom: 08:00
Number: 00001
CustomerName:
OperationTimeFrom:
预期输出:
class Call
{
public string Number { get; set; }
public string CustomerNumber { get; set; }
}
class Operation
{
public int ID { get; set; }
public string CallNumber { get; set; }
public string TimeFrom { get; set; }
}
class Customer
{
public string Number { get; set; }
public string Name { get; set; }
}
class CallViewModel
{
public string Number { get; set; }
public string CustomerName { get; set; }
public string OperationTimeFrom { get; set; }
}
class Test
{
static void Main(string[] args)
{
var call = new Call { Number = "001337", CustomerNumber = "000001" };
var op = new Operation { ID = 1, CallNumber = "001337", TimeFrom = "08:00" };
var customer = new Customer { Number = "000001", Name = "John Doe" };
var viewModel = new CallViewModel();
viewModel.InjectFrom(call, op, customer);
Console.WriteLine("Number:\t\t\t" + viewModel.Number);
Console.WriteLine("CustomerName:\t\t" + viewModel.CustomerName);
Console.WriteLine("OperationTimeFrom:\t" + viewModel.OperationTimeFrom);
Console.ReadLine();
}
}
Number: 001337
CustomerName: John Doe
OperationTimeFrom: 08:00
Number: 00001
CustomerName:
OperationTimeFrom:
有效输出:
class Call
{
public string Number { get; set; }
public string CustomerNumber { get; set; }
}
class Operation
{
public int ID { get; set; }
public string CallNumber { get; set; }
public string TimeFrom { get; set; }
}
class Customer
{
public string Number { get; set; }
public string Name { get; set; }
}
class CallViewModel
{
public string Number { get; set; }
public string CustomerName { get; set; }
public string OperationTimeFrom { get; set; }
}
class Test
{
static void Main(string[] args)
{
var call = new Call { Number = "001337", CustomerNumber = "000001" };
var op = new Operation { ID = 1, CallNumber = "001337", TimeFrom = "08:00" };
var customer = new Customer { Number = "000001", Name = "John Doe" };
var viewModel = new CallViewModel();
viewModel.InjectFrom(call, op, customer);
Console.WriteLine("Number:\t\t\t" + viewModel.Number);
Console.WriteLine("CustomerName:\t\t" + viewModel.CustomerName);
Console.WriteLine("OperationTimeFrom:\t" + viewModel.OperationTimeFrom);
Console.ReadLine();
}
}
Number: 001337
CustomerName: John Doe
OperationTimeFrom: 08:00
Number: 00001
CustomerName:
OperationTimeFrom:
注意
CallViewModel
中表示为Number
的Call.Number
被Customer.Number
覆盖。CustomerName
和OperationTimeFrom
都无法获取其指定源Customer.Name
和Operation.TimeFrom
的值
在这种情况下我必须做什么?ValueInjector支持这种情况吗?我猜您考虑过用另一种方式进行扁平化, 它的工作方式是你从
obj.Prop.Prop1.Prop2 to obj.PropProp1Prop2
这是您修改的代码:
using System;
using Omu.ValueInjecter;
namespace ConsoleApplication1
{
class Program
{
private static void Main(string[] args)
{
var call = new Call { Number = "001337", CustomerNumber = "000001" };
var op = new Operation { ID = 1, CallNumber = "001337", TimeFrom = "08:00" };
var customer = new Customer { Number = "000001", Name = "John Doe" };
var model = new
{
Call = call,
Customer = customer,
Operation = op
};
var viewModel = new CallViewModel();
viewModel.InjectFrom<FlatLoopValueInjection>(model);
Console.WriteLine("Number:\t\t\t" + viewModel.CallNumber);
Console.WriteLine("CustomerName:\t\t" + viewModel.CustomerName);
Console.WriteLine("OperationTimeFrom:\t" + viewModel.OperationTimeFrom);
Console.ReadLine();
}
class Call
{
public string Number { get; set; }
public string CustomerNumber { get; set; }
}
class Operation
{
public int ID { get; set; }
public string CallNumber { get; set; }
public string TimeFrom { get; set; }
}
class Customer
{
public string Number { get; set; }
public string Name { get; set; }
}
class CallViewModel
{
public string CallNumber { get; set; }
public string CustomerName { get; set; }
public string OperationTimeFrom { get; set; }
}
}
}
使用系统;
使用Omu.valueinjector;
命名空间控制台应用程序1
{
班级计划
{
私有静态void Main(字符串[]args)
{
var call=新呼叫{Number=“001337”,CustomerNumber=“000001”};
var op=新操作{ID=1,CallNumber=“001337”,TimeFrom=“08:00”};
var customer=新客户{Number=“000001”,Name=“John Doe”};
var模型=新
{
呼叫,
客户=客户,
操作=op
};
var viewModel=new CallViewModel();
viewModel.InjectFrom(model);
Console.WriteLine(“编号:\t\t\t”+viewModel.CallNumber);
Console.WriteLine(“CustomerName:\t\t”+viewModel.CustomerName);
Console.WriteLine(“OperationTimeFrom:\t”+viewModel.OperationTimeFrom);
Console.ReadLine();
}
集体电话
{
公共字符串编号{get;set;}
公共字符串CustomerNumber{get;set;}
}
班级作业
{
公共int ID{get;set;}
公共字符串CallNumber{get;set;}
公共字符串TimeFrom{get;set;}
}
类客户
{
公共字符串编号{get;set;}
公共字符串名称{get;set;}
}
类CallViewModel
{
公共字符串CallNumber{get;set;}
公共字符串CustomerName{get;set;}
公共字符串操作timefrom{get;set;}
}
}
}
我在发帖之前就试过了。我使用了viewModel.InjectFrom(call、op、customer)
但是以与上面相同的输出结束OK我现在知道FlatLoopValueInjection
查找要匹配的属性名称。是否存在与类型名称匹配的注入?如果没有,可以创建一个吗?@Sandro你可以,只需查看FlatLoopValueInjection的源代码