解释C#中的依赖注入

2023年 8月 27日 56.6k 0

解释C#中的依赖注入

依赖是另一个对象所依赖的一个对象。依赖注入(或反转)基本上是提供对象所需的对象,而不是让它自己构造对象。这是一种有用的技术,可以使测试变得更容易,因为它允许您模拟依赖关系。

例如,如果类 A 调用类 B 上的方法,而类 B 又调用类 C 上的方法,则意味着A依赖于B,B依赖于C。使用依赖注入,我们可以将类C的实例传递给类B,并将B的实例传递给类A,而不是让这些类构造B和C的实例.

在下面的示例中,类 Runner 依赖于类 Logger。请注意,在类 Runner 的构造函数中创建了 Logger 的实例。这段代码有一些问题。

  • 这将记录器类与 Runner 联系在一起,我们不能用其他类替换它,
    无需修改Runner。

  • 如果Logger有任何依赖项,那么Worker必须先配置它们
    实例化 Logger。

  • 测试更加困难。如果Logger是资源密集型类,比如访问
    网络或文件系统,它会减慢测试速度。我们无法轻易更换它。

using System;
class Program{
static void Main(string[] args){
var runner = new Runner();
runner.Run();
}
}
class Runner{
private Logger _logger;
public Runner(){
_logger = new Logger();
}
public void Run(){
// Do some work
_logger.Log("Message to be logged");
}
}
class Logger{
public void Log(string message){
Console.WriteLine(message);
}
}

登录后复制

使用依赖注入,我们修改 Runner 的构造函数以接受接口 ILogger,而不是具体对象。我们更改 Logger 类来实现 ILogger。这允许我们将 Logger 类的实例传递给 Runner 的构造函数。这样做的好处是,在测试期间,我们可以创建一个实现 ILogger 的 TestLogger 类,并将其传递给 Runner 的构造函数。

示例

 实时演示

using System;
class Program{
static void Main(string[] args){
var logger = new Logger();
var runner = new Runner(logger);
runner.Run();
}
}
class Runner{
private ILogger _logger;
public Runner(ILogger logger){
_logger = logger;
}
public void Run(){
// Do some work
_logger.Log("Message to be logged");
}
}
interface ILogger{
void Log(string message);
}
class Logger : ILogger{
public void Log(string message){
Console.WriteLine(message);
}
}

登录后复制

输出

Message to be logged

登录后复制

以上就是解释C#中的依赖注入的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论