Bre*_*ogt 25 asp.net asp.net-mvc asp.net-mvc-3 valueinjecter
我在用ASP.NET MVC 3.
有人可以帮我澄清这里发生的事情:
var person = new PersonRepository().Get();
var personViewModel = new PersonViewModel();
personViewModel.InjectFrom<LoopValueInjection>(person)
.InjectFrom<CountryToLookup>(person);
Run Code Online (Sandbox Code Playgroud)
我的Index观点有一个网格.每行都是一个实例CategoryViewModel.所以我所做的是获取所有类别的列表,然后将每个Category类别映射到CategoryViewModel,然后将此ListViewModel列表传递给视图.我会做那样的映射吗?
IEnumerable<Category> categoryList = categoryService.GetAll();
Run Code Online (Sandbox Code Playgroud)
我认为以下内容可行,但事实并非如此:
// Mapping
IList<CategoryViewModel> viewModelList = new List<CategoryViewModel>();
viewModelList.InjectFrom(categoryList);
Run Code Online (Sandbox Code Playgroud)
Dar*_*rov 46
AFAIK值injecter不支持AutoMapper之类的自动集合映射,但您可以使用简单的LINQ表达式并对每个元素进行操作:
IEnumerable<Category> categoryList = categoryService.GetAll();
IList<CategoryViewModel> viewModelList = categoryList
.Select(x => new CategoryViewModel().InjectFrom(x)).Cast<CategoryViewModel>()
.ToList();
Run Code Online (Sandbox Code Playgroud)
jga*_*fin 24
//source list
IEnumerable<string> items = new string[] { "1", "2" };
// target list
List<int> converted = new List<int>();
// inject all
converted.InjectFrom(items);
Run Code Online (Sandbox Code Playgroud)
和扩展方法:
public static ICollection<TTo> InjectFrom<TFrom, TTo>(this ICollection<TTo> to, IEnumerable<TFrom> from) where TTo : new()
{
foreach (var source in from)
{
var target = new TTo();
target.InjectFrom(source);
to.Add(target);
}
return to;
}
Run Code Online (Sandbox Code Playgroud)
ICollection<T>是获得最少功能但是Add方法的接口.
更新
使用更合适的模型的示例:
var persons = new PersonRepository().GetAll();
var personViewModels = new List<PersonViewModel>();
personViewModels.InjectFrom(persons);
Run Code Online (Sandbox Code Playgroud)
更新 - 从不同来源注入
public static ICollection<TTo> InjectFrom<TFrom, TTo>(this ICollection<TTo> to, params IEnumerable<TFrom>[] sources) where TTo : new()
{
foreach (var from in sources)
{
foreach (var source in from)
{
var target = new TTo();
target.InjectFrom(source);
to.Add(target);
}
}
return to;
}
Run Code Online (Sandbox Code Playgroud)
用法:
var activeUsers = new PersonRepository().GetActive();
var lockedUsers = new PersonRepository().GetLocked();
var personViewModels = new List<PersonViewModel>();
personViewModels.InjectFrom(activeUsers, lockedUsers);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9411 次 |
| 最近记录: |