Simple Injector:在基类中注入属性

几周以来,我一直在使用Simple Injectordependency injection容器,取得了巨大的成功。 我喜欢简单的配置它。 但现在我有一个我不知道如何配置的设计。 我有一个基类,其中有许多类型派生,我想将dependency injection基类的属性,但不必为每个派生类配置。 我尝试使用属性执行此操作,但Simple Injector不支持属性。 这是我设计的精简版。

public interface Handler where TMessage : Message { void Handle(TMessage message); } public abstract class BaseHandler { // This property I want to inject public HandlerContext Context { get; set; } } // Derived type public class NotifyCustomerHandler : BaseHandler, Handler { public NotifyCustomerHandler(SomeDependency dependency) { } public void Handle(NotifyCustomerMessage message) { } } 

我的配置现在看起来像这样:

 container.Register(); container.Register<Handler, NotifyCustomerHandler>(); // many other Handler lines here 

如何在BaseHandler中注入属性?

在此先感谢您的帮助。

关于属性注入的Simple Injector 文档给出了非常明确的解释。 基本选项是:

  • 使用RegisterInitializer注册初始化委托。
  • 覆盖Simple Injector的PropertySelectionBehavior

正如文档所解释的那样,不建议使用RegisterInitializer来依赖属性注入; 仅限于配置值。

这使您可以覆盖Simple Injector的PropertySelectionBehavior ,但是基类本身就像SOLID违规一样。 请看下面的文章 。 它描述了为什么有一个基类可能是一个坏主意,本文提出了一个解决方案。