本文介绍了DryIoc,Spring.Net的GetObjectsOfType是否等效?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
使用Spring.Net,可以查询某种(祖先)类型的所有对象.
With Spring.Net, it's possible to query all objects of a certain (ancestor) type.
var ctx = ContextRegistry.GetContext(); var setUsers = ctx.GetObjectsOfType(typeof(ISetUser)).Values.OfType<ISetUser>().ToList();如何用DryIoc完成
How can this be done with DryIoc?
推荐答案给出示例类和接口的直接答案是:
The direct answer given sample classes and interfaces would be:
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); }如果您要检索某个接口,则最好从头开始进行注册(为此计划):
If you will want to retrieve some interface, it probably good to register it from the start (plan for it):
[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); }更多推荐
DryIoc,Spring.Net的GetObjectsOfType是否等效?
发布评论