干了这么多年开发,依然感觉自己是个菜鸟程序员永远都是半桶水,最近又接触到了依赖注入,回首前几年写得都是些啥玩意,真正用起来了,结合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() // 注册ConsoleLogger作为ILogger的实现 .BuildServiceProvider(); // 从容器中解析ILogger实例 var logger = serviceProvider.GetService (); // 使用ILogger进行日志记录 logger.Log("Hello, Dependency Injection!"); // 当需要切换到FileLogger时,只需修改注册的实现类型 serviceProvider = new ServiceCollection() .AddSingleton () // 注册FileLogger作为ILogger的实现 .BuildServiceProvider(); logger = serviceProvider.GetService (); logger.Log("Logging to a file now!"); } }
在上述示例中,例子创建了一个ServiceProvider对象,并使用AddSingleton方法将ILogger接口与ConsoleLogger实现关联起来。然后使用GetService方法从容器中解析ILogger实例,并使用它来记录日志消息。
如果我们想切换到使用FileLogger,我们只需要修改依赖注入容器的注册部分即可。