2016-05-04 10 views
1

Spring.Netでは、特定の(祖先)タイプのすべてのオブジェクトを照会することができます。DryIoc、Spring.NetのGetObjectsOfType相当ですか?

 var ctx = ContextRegistry.GetContext(); 

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

これはどのようにしてDryIocで行うことができますか?

+0

ISetUserの登録方法は? ResolveManyを試したことがあると思います。 – dadhi

+0

これは登録されていません。登録済み/マップされたクラスが実装しているインターフェースの一部です。 –

答えて

1

直接的な答え与えられたサンプルのクラスとインタフェースは次のようになります。

[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); 
} 
:あなたには、いくつかのインターフェイスを取得することになるでしょう場合

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); 
} 

が、それはおそらく良いスタート(それのための計画)から、それを登録します