¿Cómo registrar todos los tipos de una interfaz y obtener una instancia de ellos en la unidad?
¿Cómo puede la unidad obtener todas las instancias de una interfaz y luego acceder a ellas?
Las piezas de código se toman de aquí:Fail-Tracker
En StrcutureMap es posible registrar todos los tipos de una interfaz desde un ensamblaje y luego acceder a ellos de la siguiente manera:
public class TaskRegistry : Registry
{
public TaskRegistry()
{
Scan(scan =>
{
scan.AssembliesFromApplicationBaseDirectory(
a => a.FullName.StartsWith("FailTracker"));
scan.AddAllTypesOf<IRunAtInit>();
scan.AddAllTypesOf<IRunAtStartup>();
scan.AddAllTypesOf<IRunOnEachRequest>();
scan.AddAllTypesOf<IRunOnError>();
scan.AddAllTypesOf<IRunAfterEachRequest>();
});
}
}
ObjectFactory.Configure(cfg =>
{
cfg.AddRegistry(new TaskRegistry());
});
y luego acceder a todos los tipos que implementan esas interfaces como:
using (var container = ObjectFactory.Container.GetNestedContainer())
{
foreach (var task in container.GetAllInstances<IRunAtInit>())
{
task.Execute();
}
foreach (var task in container.GetAllInstances<IRunAtStartup>())
{
task.Execute();
}
}
¿Cuál es el equivalente de este código en la unidad?
¿Cómo puedo obtenerlos en Application_BeginRequest como structuremap
public void Application_BeginRequest()
{
Container = ObjectFactory.Container.GetNestedContainer();
foreach (var task in Container.GetAllInstances<IRunOnEachRequest>())
{
task.Execute();
}
}