编辑
2025-09-27
C#
00

目录

摘要
正文
基本使用
示例1:简单注入
示例2:构造函数注入
示例3:桌面应用程序

摘要

Castle Windsor 是一个功能强大的依赖注入容器,它是 Castle Project 的一部分。它可以帮助.NET开发者管理对象之间的依赖关系,使得代码更加模块化,易于测试和维护。在本文中,我将介绍Castle Windsor的基本概念,并通过多个场景的例子展示其在实际开发中的应用。

Castle Windsor 是一个开源的Inversion of Control(IoC)容器,它提供了依赖注入的实现。使用Castle Windsor,开发者可以将对象的创建和生命周期管理交由容器处理,从而实现了控制反转的原则。

正文

基本使用

在开始之前,你需要通过NuGet安装Castle Windsor:

Install-Package Castle.Windsor

image.png

示例1:简单注入

假设我们有一个服务接口和其实现类:

C#
public interface IMessageService { void Send(string message); }
C#
public class EmailService:IMessageService { public void Send(string message) { Console.WriteLine($"邮件发送:{message}"); } }

我们可以创建一个Windsor容器,并注册我们的服务:

C#
static void Main(string[] args) { var container = new WindsorContainer(); container.Register(Component.For<IMessageService>().ImplementedBy<EmailService>()); var service = container.Resolve<IMessageService>(); service.Send("Hello, Windsor!"); }

image.png

示例2:构造函数注入

C#
public class NotificationManager { private readonly IMessageService _messageService; public NotificationManager(IMessageService messageService) { _messageService = messageService; } public void Notify(string message) { _messageService.Send(message); } }
C#
static void Main(string[] args) { var container = new WindsorContainer(); // 注册服务 container.Register(Component.For<NotificationManager>()); container.Register(Component.For<IMessageService>().ImplementedBy<EmailService>()); // 解析服务 var manager = container.Resolve<NotificationManager>(); manager.Notify("Dependency Injection with Windsor!"); }

image.png

在这个例子中,NotificationManager 需要 IMessageService 作为依赖项。当 NotificationManager 被解析时,Windsor 会自动注入 EmailService 的实例。

示例3:桌面应用程序

C#
public partial class Form1 : Form { private readonly IMessageService _messageService; public Form1(IMessageService messageService) { InitializeComponent(); _messageService = messageService; } private void btnRun_Click(object sender, EventArgs e) { _messageService.Send("开始发送信息!"); } }
C#
[STAThread] static void Main() { // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); var container = new WindsorContainer(); container.Register(Component.For<IMessageService>().ImplementedBy<EmailService>()); container.Register(Component.For<Form1>()); var mainWindow = container.Resolve<Form1>(); Application.Run(mainWindow); }

image.png

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!