私有只读接口 - 它是多余的吗?

jaf*_*ffa 6 .net c# dependency-injection

我正在为我的项目使用IoC和DI.

但是我想知道以下是否是一个好习惯:

private readonly IMyService myservice;
Run Code Online (Sandbox Code Playgroud)

作为服务使用者的类中的字段.该字段在构造函数中设置.

我确定我已经在某个地方看到了这个,我已经接受了它.不过我也看到了:

private IMyService myservice;
Run Code Online (Sandbox Code Playgroud)

似乎就足够了.是否有任何目的为注入的服务接口提供只读字段?有什么好处?

Tho*_*que 10

它是一个界面的事实是无关紧要的.readonly在字段上应用修改器会阻止您(或其他人)在构造对象后更改其值.它只能在构造函数中指定.

  • 它与接口无关! (2认同)

Mar*_*ann 7

我认为使用readonly关键字是构造函数注入的正确实现的核心部分.

public class MyClass
{
    private readonly IMyService myservice;

    public MyClass(IMyService myservice)
    {
        if (myservice == null)
        {
            throw new ArgumentNullException("myservice");
        }
        this.myservice = myservice;
    }
}
Run Code Online (Sandbox Code Playgroud)

readonly技术上讲,关键字和Guard子句都不需要实现构造函数注入.但是,它们都有助于加强班级的不变量.这就是封装的全部内容.


Rex*_*x M 5

一个readonly场意味着它只能在构造函数编写.一旦完成,就无法更改或销毁引用.它对于初始化状态和强制执行不变性非常有用.