一篇.NET(C#)开发有关依赖注入的 入门级编程代码实例
干了这么多年开发,依然感觉自己是个菜鸟程序员永远都是半桶水,最近又接触到了依赖注入,回首前几年写得都是些啥玩意,真正用起来了,结合MVVM这类模式开发效率不是快了一星半点,下面是一个关于依赖注入的简单入门实例 可以用于控制台和wpf以及winform桌面编程,新手可以看看。
当涉及到依赖注入(Dependency Injection,简称DI)时,.NET C#开发提供了许多优雅且灵活的解决方案。下面是一个入门级的C#编程示例,演示了如何使用依赖注入来解耦应用程序中的组件。
假设我们正在开发一个简单的日志记录器,它可以记录消息到不同的目标,例如控制台和文件。我们将创建一个ILogger接口来定义日志记录的功能,并实现两个具体的日志记录器类:ConsoleLogger和FileLogger。
首先,我们需要定义ILogger接口:
public interface ILogger
{
void Log(string message);
}
接下来,我们实现ConsoleLogger:
public class ConsoleLogger : ILogger
{
public void Log(string message)
{
Console.WriteLine("ConsoleLogger: " + message);
}
}
然后,我们实现FileLogger:
public class FileLogger : ILogger
{
public void Log(string message)
{
// 将消息写入文件
using (var writer = new StreamWriter("log.txt", true))
{
writer.WriteLine("FileLogger: " + message);
}
}
}
现在,我们将使用依赖注入将日志记录器注入到我们的应用程序中。为此,我们将使用.NET内置的依赖注入容器(Dependency Injection Container)。
using Microsoft.Extensions.DependencyInjection;
public class Program
{
public static void Main()
{
// 创建依赖注入容器
var serviceProvider = new ServiceCollection()
.AddSingleton<ILogger, ConsoleLogger>() // 注册ConsoleLogger作为ILogger的实现
.BuildServiceProvider();
// 从容器中解析ILogger实例
var logger = serviceProvider.GetService<ILogger>();
// 使用ILogger进行日志记录
logger.Log("Hello, Dependency Injection!");
// 当需要切换到FileLogger时,只需修改注册的实现类型
serviceProvider = new ServiceCollection()
.AddSingleton<ILogger, FileLogger>() // 注册FileLogger作为ILogger的实现
.BuildServiceProvider();
logger = serviceProvider.GetService<ILogger>();
logger.Log("Logging to a file now!");
}
}
在上述示例中,例子创建了一个ServiceProvider对象,并使用AddSingleton方法将ILogger接口与ConsoleLogger实现关联起来。然后使用GetService方法从容器中解析ILogger实例,并使用它来记录日志消息。
如果我们想切换到使用FileLogger,我们只需要修改依赖注入容器的注册部分即可。