使用Autofac提供静态工厂导出的类型

时间:2011-10-15 10:33:19

标签: autofac

我有一个依赖项,它使用静态ServiceManager提供许多服务。它还提供了可用类型列表。

Type[] ServiceManager.GetServiceTypes();
object GetService(Type t);

在Autofac模块中,我想枚举这些类型并注册它们的“动态实例化”。每次请求实例时,我都应该调用ServiceManager.GetService。

1 个答案:

答案 0 :(得分:0)

我最终使用自己的RegistrationBuilder,看起来非常时髦,但它确实有效。我错过了一个明显的伎俩吗?

        foreach (var type in ServiceManager.GetServiceTypes())
        {
            var rb = RegistrationBuilder.ForDelegate(
                type, 
                (ctx, parms) => ServiceManager.GetService(type))
                .ExternallyOwned();

            builder.RegisterCallback(
                cr => RegistrationBuilder.RegisterSingleComponent(cr, rb));
        }