c# get Type form a parameter to pass to generic class or method

问题描述 投票:0回答:0

我遇到了一个问题。我有一个带有方法执行的命令,从枚举类型参数必须创建一个 ViewModel 的实例(例如 HomeViewModel)。基本实现是设置一个 switch 语句,根据情况创建不同的 ViewModels。

为了更易于维护的代码和尊重 SOLID O/C 原则,我想使用工厂..

基本代码:

if(parameter is ViewType)
        {
            ViewType viewType = (ViewType)parameter;
            switch(viewType)
            {
                case ViewType.Home:
                    _navigator.CurrentViewModel = new HomeViewModel();
                    break;
                case ViewType.Portfolio:
                    _navigator.CurrentViewModel = new PortfolioViewModel();
                    break;

            }
        }

我想我可以使用一个通用的工厂类或使用一个参数来获取对象。从而取代 switch 语句。我做了一个这样的工厂:

public class ViewModelAbstractFactory : IViewModelAbstractFactory
{
    public HomeViewModel GetHomeViewModel()
    {
        return new HomeViewModel();
    }

    public MainViewModel GetMainViewModel()
    {
        return new MainViewModel();
    }

    public PortfolioViewModel GetPortfolioViewModel()
    {
        return new PortfolioViewModel();
    }
}

但我不清楚这是否是一个好主意和/或如何实施它。

有什么建议吗?

非常感谢您的帮助:)。

c# generics factory
© www.soinside.com 2019 - 2024. All rights reserved.