使用 get 之间是否有任何边缘情况差异?放;单例服务的属性或 GetValue、SetValue 方法?

问题描述

我将 microsoft.extensions.dependencyinjection 与 Xamarin Forms 结合使用,并且我创建了一个保存应用程序配置值的服务。这些被检索并备份到我的数据库中。

这里我向 DI 指定服务:

public static IServiceCollection ConfigureServices(this IServiceCollection services)
{
   services.AddSingleton<IConfigService,ConfigService>();
   services.AddSingleton<IDatabaseService,DatabaseService>();
   return services;
} 

我的应用程序代码使用此配置服务来更新配置值,例如配置表中的 Rev 值。使用 UpdateConfig 执行更新。

我想知道我获取和设置 Rev 值的两种方式是否有任何区别。

对我来说两者看起来都一样,但我想知道是否有一些我没有考虑过的边缘情况,或者是否使用 get; set; 是一种不被认为是使用 DI 做事的好方法的做法它可能会以我不知道的方式引起问题?

任何人都可以评论是否存在差异,两种方式是否都有效,或者一种方法是否是更改和检索 Rev 值的首选方法

以下是我想要的服务示例:

public partial class ConfigService : IConfigService
{

    private IDatabaseService _databaseService;
    private Config _config;

    public ConfigService2(IDatabaseService databaseService)
    {
        _databaseService = databaseService;
        _config = _databaseService.GetConfig();
    }

    public int Rev
    {
        get => _config.Rev;
        set
        {
            _config.Rev = value;
            _databaseService.UpdateConfig(_config);
        }
    }

    public void GetRev()
    {
        return _config.Rev;

    }

    public void SetRev(int rev)
    {
        _config.Rev = rev;
        _databaseService.UpdateConfig(_config);

    }


}

解决方法

差别不大。

你的

public int Rev

被称为“属性”:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/properties

属性实际上只是语法糖,一种更方便的处理 getter 和 setter 的方法。 (GetRev 和 SetRev)。

从属性用户的角度来看,它更好一些。 他们可以写

Rev = newRev;

代替

SetRev(newRev)

这对很多人来说似乎更“自然”。