Внедрение зависимостей и атрибут InternalsVisibleTo - PullRequest
1 голос
/ 10 июля 2019

В моем решении у меня есть контейнер IoC (Ninject) в его собственном модуле. Он прекрасно работает для разрешения зависимостей между открытыми классами всех модулей, но как он может разрешить зависимости внутренних классов?

У меня есть публичный класс с именем Customer в проекте BusinessRules. Перед сохранением нового клиента необходимо вызвать много методов проверки, и все они находятся во внутреннем классе с именем CustomerValidator. Этот класс валидатора является деталью реализации и должен вызываться только для проверки нового клиента, поэтому никакой другой проект не должен его видеть.

Проблема в том, что Контейнер IoC не может видеть CustomerValidator (поскольку он является внутренним), и он не может разрешить зависимость следующим образом:

public class Customer(ICustomerValidator customerValidator)
{
//...
}

Контейнер IoC может видеть только открытый класс Customer, но ничего не знает о существовании внутреннего класса CustomerValidator. Одним из возможных решений является использование атрибута InternalsVisibleTo, обычно используемого для модульных тестов, и тогда IoC сможет видеть мои внутренние классы:

[assembly: InternalsVisibleTo("MySolution.IoC")]

Это приемлемое решение? Есть ли другие способы сделать это, оставив CustomerValidator внутренним?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...