Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将实体原理应用于基本应用程序_C#_C# 4.0_Solid Principles - Fatal编程技术网

C# 将实体原理应用于基本应用程序

C# 将实体原理应用于基本应用程序,c#,c#-4.0,solid-principles,C#,C# 4.0,Solid Principles,嗨,我正在尝试将这个坚实的原则应用到我的代码中,直到我遇到了接口和依赖项反转 我只是在FlightValidator类的构造函数方面遇到了问题。 请在这里输入代码 you can get the full project here: https://www.sendspace.com/file/zk022f 我对这门课感到困惑。在中,如何创建它的实例 public class FlightValidator { private IValidator _validator; pr

嗨,我正在尝试将这个坚实的原则应用到我的代码中,直到我遇到了接口和依赖项反转

我只是在FlightValidator类的构造函数方面遇到了问题。 请在这里输入代码

you can get the full project here: https://www.sendspace.com/file/zk022f
我对这门课感到困惑。在中,如何创建它的实例

public class FlightValidator
{
    private IValidator _validator;
    private GeneralFlightValidation _generalFlightValidation;
    private BasicFlightValidation _basicFlightValidation;
    private int flightRuleType;

    public FlightValidator(IValidator _validator,
                            int flightRuleType
                            )
    {
        this._validator = _validator;
        this.flightRuleType = flightRuleType;
    }

    public void GetFlightRule(ScheduledFlight scheduledFlight)
    {

        switch(this.flightRuleType)
        {
            case (short)FlightRuleType.STANDARD:
                {
                    this._validator.FlightValidator(scheduledFlight);
                    break;
                }
            case (short)FlightRuleType.BASIC:
                {
                    this._validator.FlightValidator(scheduledFlight);
                    break;
                }
            default:
                {
                    this._validator.FlightValidator(scheduledFlight);
                    break;
                }
        }
    }
}

public enum FlightRuleType : int
{
    STANDARD,
    BASIC
}
我对这门课感到困惑。在中,如何创建它的实例

public class FlightValidator
{
    private IValidator _validator;
    private GeneralFlightValidation _generalFlightValidation;
    private BasicFlightValidation _basicFlightValidation;
    private int flightRuleType;

    public FlightValidator(IValidator _validator,
                            int flightRuleType
                            )
    {
        this._validator = _validator;
        this.flightRuleType = flightRuleType;
    }

    public void GetFlightRule(ScheduledFlight scheduledFlight)
    {

        switch(this.flightRuleType)
        {
            case (short)FlightRuleType.STANDARD:
                {
                    this._validator.FlightValidator(scheduledFlight);
                    break;
                }
            case (short)FlightRuleType.BASIC:
                {
                    this._validator.FlightValidator(scheduledFlight);
                    break;
                }
            default:
                {
                    this._validator.FlightValidator(scheduledFlight);
                    break;
                }
        }
    }
}

public enum FlightRuleType : int
{
    STANDARD,
    BASIC
}
您可以将依赖项传递给构造函数:

IValidator validator = ...    
FlightValidator flightValidator = new FlightValidator(validator);
或者,如果您使用的是IoC容器(例如Unity):

FlightValidator FlightValidator=container.Resolve();

无论如何,我发现你的代码有点混乱。您的
FlightValidator
类依赖于一个
IValidator
,它本身有一个
FlightValidator
方法(顺便说一句,这个方法的名称很糟糕)。。。那么
FlightValidator
类有什么用呢,如果它只是调用另一个进行飞行验证的东西呢?

您在这里看到的是。一般的想法是从类中删除依赖项,并通过构造函数注入所述依赖项。这允许您的类承担更少的责任,促进重用,从而产生更敏捷的解决方案

要实例化此类,可以使用poor man的依赖项注入,如下所示:

IValidator myValidator = new SomeValidator();
FlightValidator flightValidator = new FlightValidator(myValidator, 69);

要获得更优雅的方法,可以先使用

。。你为什么会有那个switch语句?它不等于
\u validator.FlightValidator(scheduledFlight)?我正在尝试让用户在他们想要的规则中进行选择chosei在将其传递给_GeneralLightValidation和_GeneralLightValidation时遇到问题,我仍处于启用状态。我忘记更改方法名称。好的,你提到了IValidator validator=…>什么类?让我困扰的是你的
FlightValidator
类似乎并没有真正验证航班。而
GetFlightRule
方法的名称意味着它应该返回一些东西(一条飞行规则),但其返回类型为void。
FlightValidator
类应该做什么?