Как зарегистрировать все типы интерфейса и получить их экземпляр в единстве?
Как единство может получить все экземпляры интерфейса и затем получить к ним доступ?
Куски кода взяты отсюда:Нормально-Tracker
В StrcutureMap можно зарегистрировать все типы интерфейса из сборки, а затем получить к ним доступ следующим образом:
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());
});
а затем получить доступ ко всем типам, реализующим эти интерфейсы, такие как:
using (var container = ObjectFactory.Container.GetNestedContainer())
{
foreach (var task in container.GetAllInstances<IRunAtInit>())
{
task.Execute();
}
foreach (var task in container.GetAllInstances<IRunAtStartup>())
{
task.Execute();
}
}
Что эквивалентно этому коду в единстве?
Как я могу получить их в Application_BeginRequest, как Structuremap
public void Application_BeginRequest()
{
Container = ObjectFactory.Container.GetNestedContainer();
foreach (var task in Container.GetAllInstances<IRunOnEachRequest>())
{
task.Execute();
}
}