Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.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# net内核如何减少类耦合_C#_Asp.net Core_Solid Principles - Fatal编程技术网

C# net内核如何减少类耦合

C# net内核如何减少类耦合,c#,asp.net-core,solid-principles,C#,Asp.net Core,Solid Principles,如何优化类耦合?。这是我的班级,visual studio show班级耦合为16,高于最高标准9 public class Auth:IAuth { public List<AuthDetail> GetAuths() { var config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory(

如何优化类耦合?。这是我的班级,visual studio show班级耦合为16,高于最高标准9

public class Auth:IAuth
    {
        public List<AuthDetail> GetAuths()
        {
            var config = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json").Build();

            var auths = config.GetSection("Auth").GetChildren().ToList()
                .Select(x => new AuthDetail
                {
                    UserName = x.GetValue<string>("UserName"),
                    Source = x.GetValue<string>("Source"),
                    Password = x.GetValue<string>("Password")
                }).ToList();
            return auths;
        }
    }
公共类身份验证:IAuth
{
公共列表GetAuths()
{
var config=new ConfigurationBuilder()
.SetBasePath(目录.GetCurrentDirectory())
.AddJsonFile(“appsettings.json”).Build();
var auths=config.GetSection(“Auth”).GetChildren().ToList()
.选择(x=>new AuthDetail
{
用户名=x.GetValue(“用户名”),
Source=x.GetValue(“Source”),
Password=x.GetValue(“密码”)
}).ToList();
返回授权;
}
}

dIt很难在上下文之外准确地说出它在抱怨什么,但我可以想象,这只是类所拥有的依赖性级别(即它正在创建的东西),以及通常它必须具备的关于其他组件的知识。例如,它必须了解
ConfigurationBuilder
及其工作原理。虽然它与“类耦合”无关,但它还需要知道有一个
appsettings.json
文件。你也有一些神奇的字符串,比如你的
Auth
部分,如果配置没有那样设置,整个过程都会失败。同样,这不一定是“类耦合”,但它仍然是一个问题

就我个人而言,我会把这整件事扔进垃圾桶,至少从它目前的状态来看。也许
Auth
类还需要做其他事情,但这部分几乎完全没有用

首先,您的配置应该外部化。这就是重点。我假设这是图书馆的一部分,如果是的话,图书馆不应该有这种知识。它们应该只依赖于抽象,这给了您可扩展性

在实际的ASP.NET核心应用程序中,您应该指定配置(默认情况下,
appsettings.json
)。您还应该使用强类型配置,它可以取代这里的所有逻辑。换言之,这可以替换为:

services.Configure<AuthOptions>(Configuration.GetSection("Auth"));
然后,只需使用
\u auths
而不是调用
GetAuths
。如果您想公开“auths”(因为
GetAuths
是一个公共方法),您可以使用自定义getter实现一个属性,保留
GetAuths
,但只让它返回
\u auths
,或者只将
\u auths
ivar公开

public class AuthOptions
{
    public List<AuthDetail> Auths { get; set; }
}
public class Auth : IAuth
{
    private readonly List<AuthDetail> _auths;

    public Auth(IOptions<AuthOptions> authOptions)
    {
        _auths = authOptions.Value?.Auths;
    }

    ...
}