Castle Windsor的UsingFactoryMethod在Microsoft DI中的等效实现
Castle Windsor 转 Microsoft DI 等效实现
原Castle Windsor代码示例
Component.For<MultiInstanceFactory>().UsingFactoryMethod<MultiInstanceFactory>(k => t => (IEnumerable<object>)k.ResolveAll(t));
其中,MultiInstanceFactory是如下定义的委托:
public delegate IEnumerable<object> MultiInstanceFactory(Type serviceType);
Microsoft DI中的等效实现
在Microsoft.Extensions.DependencyInjection中,你可以通过AddSingleton注册该委托,用容器的GetServices方法替代Windsor的ResolveAll:
services.AddSingleton<MultiInstanceFactory>(serviceProvider => serviceType => serviceProvider.GetServices(serviceType).Cast<object>());
如果不需要显式类型转换(GetServices返回的IEnumerable<object>本身匹配委托返回类型),还可以简化为:
services.AddSingleton<MultiInstanceFactory>(serviceProvider => serviceProvider.GetServices);
内容的提问来源于stack exchange,提问作者Egli Becerra
相关产品推荐
相关产品推荐

