Как я могу использовать Unity с внутренними классами?
У меня есть приложение Web API и я использую Unity для внедрения зависимостей. Приложение использует библиотеку, содержащую интерфейс IDoStuff и класс, который реализует интерфейс:
internal interface IDoStuff
{
void DoSomething();
}
internal class DoStuff : IDoStuff
{
public void DoSomething()
{
// Do some stuff
}
}
В библиотеке также есть открытый класс, который должен что-то делать:
public class NeedToDoStuff
{
private IDoStuff doStuff;
public NeedToDoStuff()
{
this.doStuff = new DoStuff();
}
internal NeedToDoStuff(IDoStuff doStuff)
{
this.doStuff = doStuff;
}
void PleaseDoStuff()
{
doStuff.DoSomething();
}
}
Я хотел бы использовать Unity для создания экземпляра NeedToDoStuff в моем контроллере, а также для того, чтобы отвечать за внутреннее создание класса DoStuff, а не конструктор, вызывающий new напрямую. Однако единственный способ сделать это - сделать интерфейс IDoStuff и класс DoStuff общедоступными, что мне кажется неправильным. Это кажется неправильным, поскольку это детали реализации и имеют отношение только к самой библиотеке. Я понимаю, что с инверсией управления вы позволяете приложению верхнего уровня делать выбор в отношении его базовых реализаций через какую-то конфигурацию, но должно ли это означать, что больше нет необходимости во внутреннем и т. Д.?