我有一个使用Autofac的控制台应用程序。如何以编程方式访问容器中的注册信息?这是一个示例输出(它是针对Unity框架的):
Container has 14 Registrations:
+ IUnityContainer '[default]' Container
+ StorageAccount '[default]' ContainerControlled
+ IRetryPolicyFactory '[default]' ContainerControlled
+ IDataTable`1<SurveyRow> -> DataTable`1<SurveyRow> '[default]' Transient
+ IDataTable`1<QuestionRow> -> DataTable`1<QuestionRow> '[default]' Transient
+ IMessageQueue`1<SurveyAnswerStoredMessage> ->
MessageQueue`1<SurveyAnswerStoredMessage> 'Standard' Transient
+ IMessageQueue`1<SurveyAnswerStoredMessage> ->
MessageQueue`1<SurveyAnswerStoredMessage> 'Premium' Transient
...
您绝对可以使用Autofac的容器查询已注册的类型。
例:
注意:我在下面的示例代码中为
ArrayList
注册IList
。
containerBuilder.RegisterType<ArrayList>().As<IList>();
var container = containerBuilder.Build();
var componentRegistryRegistrations = container.ComponentRegistry.Registrations;
foreach (var componentRegistryRegistration in componentRegistryRegistrations) {
Console.WriteLine(componentRegistryRegistration.Activator.LimitType);
}
代码将在屏幕上打印:
Autofac.Core.Lifetime.LifetimeScope
System.Collections.ArrayList