В моем решении у меня есть контейнер IoC (Ninject) в его собственном модуле. Он прекрасно работает для разрешения зависимостей между открытыми классами всех модулей, но как он может разрешить зависимости внутренних классов?
У меня есть публичный класс с именем Customer
в проекте BusinessRules. Перед сохранением нового клиента необходимо вызвать много методов проверки, и все они находятся во внутреннем классе с именем CustomerValidator
. Этот класс валидатора является деталью реализации и должен вызываться только для проверки нового клиента, поэтому никакой другой проект не должен его видеть.
Проблема в том, что Контейнер IoC не может видеть CustomerValidator
(поскольку он является внутренним), и он не может разрешить зависимость следующим образом:
public class Customer(ICustomerValidator customerValidator)
{
//...
}
Контейнер IoC может видеть только открытый класс Customer
, но ничего не знает о существовании внутреннего класса CustomerValidator
. Одним из возможных решений является использование атрибута InternalsVisibleTo, обычно используемого для модульных тестов, и тогда IoC сможет видеть мои внутренние классы:
[assembly: InternalsVisibleTo("MySolution.IoC")]
Это приемлемое решение? Есть ли другие способы сделать это, оставив CustomerValidator внутренним?