IoC / DI - реализация во внутреннем классе, имеющая только внутренние методы - PullRequest
4 голосов
/ 12 июля 2011

Мы внедряем IoC / DI в наше приложение, используя инфраструктуру NInject. У нас есть внутренние классы, имеющие внутренние методы. Для реализации IoC / DI мы должны извлечь интерфейсы. Но если у нас есть только внутренние методы во внутреннем классе, мы не можем извлечь интерфейс для этого класса.

Так есть ли способ реализовать IoC / DI в таких случаях (внутренний класс, имеющий только внутренние методы), или мы должны изменить наши внутренние методы на публичные методы. Пожалуйста, предложите. Спасибо

Ответы [ 3 ]

3 голосов
/ 12 июля 2011

Если ваш класс уже внутренний, то между внутренними и публичными методами нет абсолютно никакой разницы.публичные методы внутренних классов видны только изнутри.

Если вы продолжаете вводить конкретные классы, но теряете все преимущества DI.Так что да, вы должны извлечь (внутренние) интерфейсы и внедрить интерфейсы.Для этого необходимо, чтобы код конфигурации имел доступ к классам, так как любой член одной и той же сборки должен быть объявлен как дружественная сборка.Более того, вы должны настроить Ninject, чтобы не было открытых классов.См. NinjectSettings.

0 голосов
/ 12 июля 2011

Вы можете использовать атрибут InternalsVisibleTo в файле AssemblyInfo.cs следующим образом:

[assembly: InternalsVisibleTo("Assembly_That_Should_Access_The_Internal_Class")]
0 голосов
/ 12 июля 2011

Единственное, что вам действительно нужно сделать общедоступным, - это интерфейс (а не конкретная реализация).

Вы можете использовать абстрактную фабрику или (проще) Ninject для сопоставления открытого интерфейса с внутренним бетоном;таким образом, ваш клиентский код просто должен запросить экземпляр «вещи», которая реализует интерфейс, и ваша фабрика / контейнер вернет реализацию.

Вы должны ознакомиться с принципом инверсии зависимости, а также -с этим.

...