gpt4 book ai didi

c# - 简易喷油器 : Injecting a property in a base class

转载 作者:太空狗 更新时间:2023-10-30 00:27:32 25 4
gpt4 key购买 nike

几个星期以来,我一直在使用 Simple Injector依赖注入(inject)容器,取得了巨大的成功。我喜欢配置它的简单性。但是现在我有一个我不知道如何配置的设计。我有一个基类,其中有许多派生类型,我想将依赖项注入(inject)基类的属性,但不必为每个派生类配置它。我试图用属性来做到这一点,但 Simple Injector 不支持属性。这是我的设计的精简版。

public interface Handler<TMessage> 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<NotifyCustomerMessage>
{
public NotifyCustomerHandler(SomeDependency dependency)
{
}

public void Handle(NotifyCustomerMessage message)
{
}
}

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

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

如何在 BaseHandler 中注入(inject)属性?

在此先感谢您的帮助。

最佳答案

简单的注入(inject)器 documentation on property injection对此给出了非常明确的解释。基本选项是:

  • 使用 RegisterInitializer 注册一个初始化委托(delegate)。
  • 覆盖简单注入(inject)器的 PropertySelectionBehavior

如文档所述,不建议使用 RegisterInitializer 对依赖项进行属性注入(inject);仅在配置值上。

这让您可以重写 Simple Injector 的 PropertySelectionBehavior,但是单独拥有一个基类听起来像是违反了 SOLID。请看the following article .它描述了为什么拥有一个基类可能不是一个好主意,并且这篇文章提出了一个解决方案。

关于c# - 简易喷油器 : Injecting a property in a base class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6227074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com