¿Tiene que registrar cada clase antes de que el contenedor AutoFAC pueda resolverse?

StackOverflow https://stackoverflow.com/questions/3413660

  •  26-09-2019
  •  | 
  •  

Pregunta

Digamos este escenario:

public class B {};

public class C
{
     public C(B b){}
}

Para resolver C desde el contenedor Autofac, tengo que registrar B y C en contenedor. Pero hoy usé Unidad, Parece que solo necesito registrar B en contenedor, entonces C se puede resolver.

¿Entonces Autofac no puede hacer lo que la unidad?

¿Fue útil?

Solución

Con la autofac de listas para usar, se espera que cada tipo que desea usar esté registrado con el contenedor, ya sea directamente utilizando el Register... métodos o a granel utilizando RegisterAssemblyTypes. Pero también hay otras opciones, eche un vistazo a Artículo de Nicholas sobre resolver todo. Entonces, sí, Autofac puede hacer lo que hace la Unidad, pero tendrá que habilitarlo.

Actualizar: En realidad, la característica "Resolver cualquier cosa" está incorporada ahora, y puede hacer lo siguiente:

        var cb = new ContainerBuilder();
        cb.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
        return cb.Build();

Con el AnyConcreteTypeNotAlreadyRegisteredSource realmente puedes resolver ambos C y B sin registrar ninguno de ellos.

Tenga en cuenta que la vida útil de los servicios resueltos por AnyConcreteTypeNotAlreadyRegisteredSource estarán "Por alcance de dependencia".

Nota: este tema En el grupo de discusión Autofac está relacionado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top