【发布时间】:2010-07-01 18:39:00
【问题描述】:
我正在做一个使用依赖注入的项目。在注册一组接口和类时,我需要指出这些接口和类所在的命名空间。
我不喜欢提供字符串常量,主要是因为它会损害可重构性。我也不喜欢使用其中一个接口/类并获得它的名称空间。例如:
typeof(FoodStore.Fruits.IApple).Namespace
因为所有这些任意类型名称都在周围徘徊看起来很奇怪(为什么选择IApple 而不是IOrange?),只是为了分散代码的实际意义。选择哪种类型根本没有明智的规则。
我想出了以下解决方案。
在我需要引用的每个命名空间中放置一个命名空间锚类:
namespace FoodStore.Fruits
{
/// <summary>
/// Serves as a type based reference to the namespace this class
/// is located in.
/// </summary>
public sealed class _NamespaceAnchor
{
}
}
现在我可以使用了:
typeof(FoodStore.Fruits._NamespaceAnchor).Namespace
每当我重构命名空间时,我都不必担心 DI 注册。
虽然这个解决方案满足了问题的要求,但我仍然不高兴,因为现在我有这些丑陋的空类在闲逛。我无法将它们设为internal,因为 - 显然 - 引用跨越程序集。
我的问题是:有人知道更优雅的解决方案吗?
【问题讨论】:
标签: c# .net dependency-injection namespaces