下面是一個例子。我已經添加斷言證明返回類型從ResolveAll<T>(this IContainer self)
是相同的(在同一順序)返回那些從ResolveAll(this IContainer self, Type type)
:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using Autofac;
using Autofac.Core;
namespace AutofacTrial
{
public abstract class Base
{
public abstract string Name { get; }
public override string ToString()
{
return Name;
}
}
public sealed class Derived1: Base
{
public override string Name
{
get
{
return "Derived1";
}
}
}
public sealed class Derived2: Base
{
public override string Name
{
get
{
return "Derived2";
}
}
}
public sealed class Derived3: Base
{
public override string Name
{
get
{
return "Derived3";
}
}
}
static class Program
{
static void Main()
{
var builder = new ContainerBuilder();
builder.RegisterType<Derived1>().As<Base>();
builder.RegisterType<Derived2>().As<Base>();
builder.RegisterType<Derived3>().As<Base>();
var container = builder.Build();
var array1 = container.ResolveAll(typeof(Base));
var array2 = container.ResolveAll<Base>();
Trace.Assert(array1.Length == 3);
Trace.Assert(array2.Length == 3);
for (int i = 0; i < array1.Length; ++i)
{
Trace.Assert(array1[i].GetType() == array2[i].GetType());
Console.WriteLine(array1[i]);
}
}
public static T[] ResolveAll<T>(this IContainer self)
{
return self.Resolve<IEnumerable<T>>().ToArray();
}
public static object[] ResolveAll(this IContainer self, Type type)
{
Type enumerableOfType = typeof(IEnumerable<>).MakeGenericType(type);
return (object[]) self.ResolveService(new TypedService(enumerableOfType));
}
}
}
下屬執行相同
我也使用Reflector
看的Resolve<IEnumerable<T>>()
實施,它捲起這樣做:
public static TService Resolve<TService>(this IComponentContext context, IEnumerable<Parameter> parameters)
{
return (TService) context.Resolve(typeof(TService), parameters);
}
的呼叫:
public static object Resolve(this IComponentContext context, Type serviceType, IEnumerable<Parameter> parameters)
{
return context.ResolveService(new TypedService(serviceType), parameters);
}
於是兩人必須等同,因爲它們實現的方式。
請參見[56,「問題‘’包括在他們的頭銜?」標籤(http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles ),那裏的共識是「不,他們不應該」! – 2016-02-11 16:54:06
[獲取實現某個接口的所有註冊對象的列表]的可能重複(http://stackoverflow.com/questions/24369861/get-a-list-of-all-registered-objects-implementing-a-certain-接口) – 2016-02-11 17:02:02