【发布时间】:2013-12-01 12:04:42
【问题描述】:
在进入 DI 之前,我非常喜欢使用所谓的枚举类(或我脑海中的强枚举),其中枚举被转换为类,但设置为以与枚举类似的方式使用。这使得真正属于特定枚举的逻辑能够被封装在正确的位置,并防止代码库中出现大量混乱。
一个例子是在这里找到的http://lostechies.com/jimmybogard/2008/08/12/enumeration-classes/
一旦将 DI 带入方程,由于依赖静态变量,它会出现问题。
有什么方法可以继续支持这种模式并同时使用 DI?
编辑: 如果我想向 EmployeeType 注入一些新的东西,这是一个有问题的类型示例。由于静态变量,我无法使用容器。
public class EmployeeType : Enumeration
{
public static readonly EmployeeType Manager
= new ManagerType (0, "Manager");
public static readonly EmployeeType Servant
= new EmployeeType(1, "Servant");
public static readonly EmployeeType AssistantToTheRegionalManager
= new EmployeeType(2, "Assistant to the Regional Manager");
private EmployeeType() { }
private EmployeeType(int value, string displayName) : base(value, displayName) { }
}
public class ManagerType : EmployeeType
{
}
【问题讨论】:
-
这种模式相对于常规继承或策略模式(两者都没有这个问题)有什么优势?
-
我认为熟悉度/可用性以及从枚举到枚举类的迁移容易(即使用相同)。
-
请举例说明您正在做什么以及与 DI 一起出现问题的地方。
-
当它本质上是硬编码时,为什么你需要 DI 呢?您不会将 DI 与标准枚举一起使用,对吗?
-
这不是我的实际代码,但坚持这个假例子,假设我后来想注入一些工厂或其他,因为我需要在 EmployeeType 接口中公开一些东西。
标签: c# .net dependency-injection ioc-container simple-injector