2016-05-04 12 views
1

С Spring.Net можно запросить все объекты определенного типа (предка).DryIoc, эквивалент GetObjectsOfType Spring.Net?

 var ctx = ContextRegistry.GetContext(); 

     var setUsers = ctx.GetObjectsOfType(typeof(ISetUser)).Values.OfType<ISetUser>().ToList(); 

Как это можно сделать с помощью DryIoc?

+0

Как регистрируется ваш ISetUser? Я предполагаю, что вы уже пробовали ResolveMany. – dadhi

+0

Он не зарегистрирован, это просто интерфейс, который реализует некоторые из моих зарегистрированных/сопоставленных классов. –

ответ

1

Прямой ответ данного образца классы и интерфейсы будут:

public interface IA { } 
public interface IB { } 
public class AB : IA, IB { } 
public class AA : IA { } 

[Test] 
public void Resolve_all_services_implementing_the_interface() 
{ 
    var container = new Container(); 
    container.Register<IB, AB>(); 
    container.Register<AA>(); 

    // resolve IA's, even if no IA service type was registered 
    var aas = container.GetServiceRegistrations() 
     .Where(r => typeof(IA).IsAssignableFrom(r.Factory.ImplementationType ?? r.ServiceType)) 
     .Select(r => (IA)container.Resolve(r.ServiceType)) 
     .ToList(); 

    Assert.AreEqual(2, aas.Count); 
} 

Если вы хотите, чтобы получить какой-то интерфейс, он, вероятно, хорошо, чтобы зарегистрировать его с самого начала (план для него):

[Test] 
public void Resolve_automatically_registered_interface_services() 
{ 
    var container = new Container(); 

    // changed to RegisterMany to automatically register implemented interfaces as services 
    container.RegisterMany<AB>(); 
    container.RegisterMany<AA>(); 

    // simple resolve 
    var aas = container.Resolve<IList<IA>>(); 

    Assert.AreEqual(2, aas.Count); 
}