所以基本的想法是:
我们有一些业务模型。
我们的基本本能是将模型映射到视图模型。正如你所看到的,我想使用
我们有一些业务模型。
public class Model
{
public int Foo { get; set; }
}
这是它的视图模型表示
public class ViewModel
{
public string Foo { get; set; }
public static explicit operator ViewModel(Model b)
{
// Map instances using AutoMapper or whatever
return new ViewModel { Foo = b.Foo.ToString() };
}
}
我们的基本本能是将模型映射到视图模型。正如你所看到的,我想使用
explicit operator
执行映射,这样我就可以进行以下操作:var model = new Model { Foo = 42 }; // Get model
var viewModel = (ViewModel)model; // Map to view model
我希望我的控制器代码尽可能地干净... 但是我想让视图模型和映射逻辑保持分离。如何将explicit operator
的实现移动到某个外部类中?类似于扩展方法:
public static class Extensions
{
public static explicit operator ViewModel(Model b)
{
// Map instances using Automapper or whatever
return new ViewModel { Foo = b.Foo.ToString() };
}
}
显然,此代码由于两个原因而无法编译:
- 静态类不能包含用户定义的运算符
- 参数或返回类型必须是 Extensions
此外,作为一种选择,我可以使视图模型部分化,并将模型本身和运算符分离到单独的 .cs 文件中,但这不会产生改变。在架构上,它们仍然是相同的类在同一个命名空间中。我希望能够在解决方案中的另一个项目中实现映射逻辑,例如。
我只想实现类似于扩展方法的效果。我该怎么做呢?
ViewModel
类之外但在explicit operator
内部。我说得越多,听起来就越不可能。 - Dmytro