Pregunta En Autofac, ¿cómo puedo cambiar la instancia que está registrada después de haber llamado a Build?


Entonces digamos que tengo este código

var builder = new ContainerBuilder();
builder.RegisterInstance(new MyType());
var container = builder.Build();

Luego, algún tiempo después, quiero cambiar la instancia de MyType para todos los resuelve futuros que se requieren container.


30
2017-10-18 03:50


origen


Respuestas:


En el momento en que desee cambiar el registro, cree un nuevo ContainerBuilder, registra la nueva instancia y llama Update pasando en el contenedor:

// at some later point...
builder = new ContainerBuilder();
builder.RegisterInstance(myType2);
builder.Update(container);

47
2017-10-18 04:11



Una alternativa podría ser registrar un delegado que pueda cambiar la instancia subyacente proporcionada por el contenedor. Considera el siguiente código:

 var theInstance = new MyType();
 var builder = new ContainerBuilder();
 builder.Register(context => theInstance);
 builder.Register<Action<MyType>>(context => newInstance => theInstance = newInstance);
 var container = builder.Build();

Ahora puede resolver la acción para obtener un delegado que pueda cambiar el registro:

 var updateInstance = c.Resolve<Action<MyType>>();
 updateInstance(new MyType());

Nota: si pudieras elaborar cuando y por qué necesitas cambiar la instancia, quizás podríamos encontrar una mejor solución.


20
2017-10-18 11:38