Я работаю над проектом, в котором я использую Depency Injection. При регистрации набора интерфейсов и классов мне нужно указать пространства имен, в которых расположены эти интерфейсы и классы.
Хотя я не люблю предоставлять строковые константы, главным образом потому, что это вредит рефакторируемости. Мне не нравится брать один из интерфейсов / классов и получать его пространство имен. Например:
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
, потому что - очевидно - ссылки охватывают разные сборки.
Мой вопрос: кто-нибудь знает более элегантное решение?