Возвращение списка <T>экземпляров классов из IOC - PullRequest
0 голосов
/ 06 февраля 2012

Я изучаю использование контейнера IOC, но я работаю с устаревшим кодом, и везде есть множество CreateInstance, а затем все делается с этим классом.

Есть ли способ получить контейнер IOC для возврата списка созданных им экземпляров классов, чтобы используемые в настоящее время методы могли продолжать делать свое дело просто без CreateInstance

Например,Autofac будет сканировать сборку / набор сборок с кодом, подобным приведенному ниже, мне просто интересно, может ли он вернуть List<T> созданных им классов.

var dataAccess = Assembly.GetExecutingAssembly();

builder.RegisterAssemblyTypes(dataAccess)
    .Where(t => t.Name.EndsWith("Repository"))
    .AsImplementedInterfaces();

ОБНОВЛЕНИЕ: Я просто решаю, какой IOC использовать, но мне нужны вышеуказанные функциональные возможности, чтобы сообщить мне, для каких классов были созданы экземпляры.

Ответы [ 2 ]

1 голос
/ 06 февраля 2012

Один из тегов говорит, что вы используете Autofac.Поэтому я считаю, что у вас есть доступ к IContainer.Autofac отслеживает экземпляры каждого объекта, который он создает.Посмотрите на сферу, которая у него есть.Для получения дополнительной информации прочитайте документацию http://code.google.com/p/autofac/wiki/OwnedInstances

Я нашел хороший блог об Autofac, возможно, вы можете прочитать об этом для понимания LifeTimeScopes и т. Д. http://nblumhardt.com/2011/01/an-autofac-lifetime-primer/

0 голосов
/ 06 февраля 2012

Ты имеешь в виду что-то вроде

var classes = _container.Resolve<IEnumerable<YourClassType>>().ToList();

Приведенный выше синтаксис работает до тех пор, пока все классы, производные от YourClassType, были зарегистрированы в качестве.

_container.Resolve<IEnumerable<T>>() сообщает автофаку разрешить все классы, которые реализуют T.

...