¿Cómo puedo usar Unity con clases internas?
Tengo una aplicación de API web y estoy usando Unity para la inyección de dependencia. La aplicación utiliza una biblioteca que contiene una interfaz IDoStuff y una clase que implementa la interfaz:
internal interface IDoStuff
{
void DoSomething();
}
internal class DoStuff : IDoStuff
{
public void DoSomething()
{
// Do some stuff
}
}
La biblioteca también tiene una clase pública que necesita hacer cosas:
public class NeedToDoStuff
{
private IDoStuff doStuff;
public NeedToDoStuff()
{
this.doStuff = new DoStuff();
}
internal NeedToDoStuff(IDoStuff doStuff)
{
this.doStuff = doStuff;
}
void PleaseDoStuff()
{
doStuff.DoSomething();
}
}
Me gustaría usar Unity para crear una instancia de NeedToDoStuff en mi controlador y también ser responsable de crear la clase DoStuff internamente, en lugar de que el constructor llame a new directamente. Sin embargo, la única forma en que puedo hacer esto es hacer que la interfaz IDoStuff y la clase DoStuff sean públicas, lo que me parece incorrecto. Parece incorrecto ya que estos son detalles de implementación y solo son relevantes dentro de la propia biblioteca. Entiendo que con la inversión de control, está permitiendo que la aplicación de nivel superior tome decisiones sobre sus implementaciones subyacentes a través de la configuración de algún tipo, pero ¿debería esto significar que ya no hay necesidad de un sistema interno, etc.?