4

我一直在努力下定决心如何在我的 MVC 解决方案中处理 ViewModel。我认为,在阅读了不同的帖子和博客之后,最好的方法是让构建器实现接口,然后将它们注入控制器本身。

使用自动映射器,我将在每个构建器的实现中进行实体和视图模型之间的映射,并且控制器将保持非常薄。

所以我创建了这个界面

public interface IViewModelBuilder<TViewModel, TEntity>
{
    TViewModel Build(TEntity entity);
}

目前我忽略了关于使它们成为协变和逆变的警告(不知道是否需要这样做)。

对于特定的 ViewModel,虽然我需要从两个不同的服务中获取两个实体,所以我不知道应该传递什么类型的参数。

public class ConcreteVMBuilder: IViewModelBuilder<concreteVM, ????>

也许那个界面不正确?

我知道合并控制器中获取的两个实体不是一个干净的解决方案,对吧?

如果有人可以帮我一把,我将非常感激

4

1 回答 1

4

让可注入类型成为 vm 的嵌套类怎么样?

例如类似的东西

public class SomeViewModelBuilder : IViewModelBuilder<SomeViewModelBuilderArgs>
{
    public class SomeViewModelBuilderArgs 
    {
        public SomeEntity Entity1 { get; private set; }
        public SomeOtherEntity Entity2 { get; private set; }

        public SomeViewModelBuilderArgs(Entity1 someEntity, Entity2 someOtherEntity) 
        {
            SomeEntity = someEntity;
            SomeOtherEntity = someOtherEntity;
        }
    }

    public SomeViewModel Build(SomeViewModelBuilderArgs)
    {
        // Do work
        return new SomeViewModel();
    }
}

然后调用您的标准接口来注入实体:

builderInterface.Build(new SomeViewModelClass.SomeViewModelBuilderArgs(ent1, ent2));

这些帮助有用?

编辑:另外 - 是否需要第一个通用参数,因为接口甚至不使用它?

Edit2:哦,我的错,你要退回它 - 忽略最后一条评论!

于 2013-04-14T20:46:07.510 回答