记录一次Stylet注册报错

注册代码

 protected override void ConfigureIoC(IStyletIoCBuilder builder)
 {
     builder.Bind<IOrderProcessor>().To<OrderProcessorDecorator>().WithKey("Decorator");
     builder.Bind<IOrderProcessor>().To<OrderProcessor>().WithKey("Default");
 }

业务代码

 public class Order
 {
     public int Id { set; get; }
     public string Name { set; get; }
     public int Count { set; get; }
     public double Price { set; get; }
     public string Desc { set; get; }
 }

 public interface IOrderProcessor
 {
     void Submit(Order order);
 }

 public class OrderProcessor : IOrderProcessor
 {
     public void Submit(Order order)
     {
         Console.WriteLine("提交订单00001");
     }
 }

 /// <summary>
 /// 这就相当于一个横向切面,去处理业务逻辑
 /// </summary>
 public class OrderProcessorDecorator : IOrderProcessor
 {
     public IOrderProcessor _IOrderProcessor;

     public OrderProcessorDecorator(IOrderProcessor iorderprocessor)
     {
         _IOrderProcessor = iorderprocessor;
     }

     public void Submit(Order order)
     {
         PreProceed(order);
         _IOrderProcessor.Submit(order);
         PostProceed(order);
     }

     public void PreProceed(Order order)
     {
         Console.WriteLine("提交订单前,进行订单数据校验....");
         if (order.Price < 0)
         {
             Console.WriteLine("订单总价有误,请重新核对订单。");
         }
     }

     public void PostProceed(Order order)
     {
         Console.WriteLine("提交带单后,进行订单日志记录......");
         Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "提交订单,订单名称:" + order.Name + ",订单价格:" + order.Price);
     }
 }

之所以注册失败,是因为
装饰器模式 和 依赖注入容器 的交互导致的循环依赖。Stylet 的 IoC 容器检测到 OrderProcessorDecorator 需要注入 IOrderProcessor,而 IOrderProcessor 又指向 OrderProcessorDecorator 自身,形成了无限递归。

正确写法是

protected override void ConfigureIoC(IStyletIoCBuilder builder)
{
    // 注册核心实现(OrderProcessor)
    builder.Bind<OrderProcessor>().ToSelf();

    // 注册 IOrderProcessor 为装饰器
    builder.Bind<IOrderProcessor>().ToFactory(c =>
        new OrderProcessorDecorator(c.Get<OrderProcessor>()));
}
posted @ 2025-06-29 21:22  孤沉  阅读(9)  评论(0)    收藏  举报