Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.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# 在web窗体类中读取多个httpContext调用的干净方法_C#_Vb.net_Dependency Injection_Inversion Of Control_Clean Architecture - Fatal编程技术网

C# 在web窗体类中读取多个httpContext调用的干净方法

C# 在web窗体类中读取多个httpContext调用的干净方法,c#,vb.net,dependency-injection,inversion-of-control,clean-architecture,C#,Vb.net,Dependency Injection,Inversion Of Control,Clean Architecture,我想知道其他人是否有选择将以下内容写成“干净代码” 还有。。。这是用VB写的,但我很高兴能用C写一些建议# (我只是在记事本上写的……可能无法编译,但这是我质疑的原则) 现在,我想去掉所有的“httpContext”和“ConfigurationManager”引用(cleaner,因此我可以进行单元测试等等) 我考虑过的一种方法是为这四种情况创建提供者类,例如 _SessionIdProvider as ISessionIdProvider _IdentityNameProvider as I

我想知道其他人是否有选择将以下内容写成“干净代码”

还有。。。这是用VB写的,但我很高兴能用C写一些建议#

(我只是在记事本上写的……可能无法编译,但这是我质疑的原则)

现在,我想去掉所有的“httpContext”和“ConfigurationManager”引用(cleaner,因此我可以进行单元测试等等)

我考虑过的一种方法是为这四种情况创建提供者类,例如

_SessionIdProvider as ISessionIdProvider
_IdentityNameProvider as INameProvider
_FilePathProvider as IPathProvider
_AppSettingsAllowSomethingProvider as IAllowSomethingProvider
把这些都注射进去!我现在觉得这很混乱

我考虑了一个助手类,因此需要注入一个对象,我可以使用它来获取这些值。。但是解决方案中的其他地方可能需要sessionID,例如,具有不在此helper类中的其他值,因此可能有重复的代码,或者有大量的helper类


有什么想法吗?像这样注入太多依赖项是不是很麻烦?

我不认为四个依赖项太多,但它可能处于边缘。。。我建议您遵循并让客户机类(
MyTest
)“设计”它所需的接口

但是,由于所讨论的方法都不接受任何参数,因此您可以将所有依赖项减少为

在C#中,可能是这样的:

public class MyTest
{
    public MyTest(string sessionId, string identityName, bool allowSomething, string filePath)
    {
        SessionId = sessionId;
        IdentityName = identityName;
        AllowSomething = allowSomething;
        FilePath = filePath;
    }

    public string SessionId { get; }
    public string IdentityName { get; }
    public bool AllowSomething { get; }
    public string FilePath { get; }

    public void SaveSomething(string message)
    {
        Save($"{SessionId} == {IdentityName} == {message}");
        if (allowSomething))
            DoSomethingElse();
    }

    private void Save(message)
    {
        var filePath = FilePath;
        // some code here to save
    }

    private void DoSomethingElse()
    {
        // some code here
    }
}

这三个值
SessionId
IdentityName
AllowSomething
看起来像是属于一组与身份验证和授权相关的值,因此它们可能更适合作为一个整体。

我不认为这四个值有太多依赖关系,但它可能处于边缘。。。我建议您遵循并让客户机类(
MyTest
)“设计”它所需的接口

但是,由于所讨论的方法都不接受任何参数,因此您可以将所有依赖项减少为

在C#中,可能是这样的:

public class MyTest
{
    public MyTest(string sessionId, string identityName, bool allowSomething, string filePath)
    {
        SessionId = sessionId;
        IdentityName = identityName;
        AllowSomething = allowSomething;
        FilePath = filePath;
    }

    public string SessionId { get; }
    public string IdentityName { get; }
    public bool AllowSomething { get; }
    public string FilePath { get; }

    public void SaveSomething(string message)
    {
        Save($"{SessionId} == {IdentityName} == {message}");
        if (allowSomething))
            DoSomethingElse();
    }

    private void Save(message)
    {
        var filePath = FilePath;
        // some code here to save
    }

    private void DoSomethingElse()
    {
        // some code here
    }
}
三个值
SessionId
IdentityName
AllowSomething
看起来像是属于一组与身份验证和授权相关的值,因此它们可能更适合作为一个整体