Unity中的AutoFac等效代码

时间:2014-11-18 12:24:01

标签: refactoring unity-container autofac

我们的任务是重构使用AutoFac构建的应用程序并使用Unity。我们设法迁移了大部分代码,但是如果能在Unity中获得相当于以下代码段的话,我会很感激。

   var consumers = typeFinder.FindClassesOfType(typeof(IConsumer<>)).ToList();
        foreach (var consumer in consumers)
        {
            builder.RegisterType(consumer)
                .As(consumer.FindInterfaces((type, criteria) =>
                {
                    var isMatch = type.IsGenericType && ((Type)criteria).IsAssignableFrom(type.GetGenericTypeDefinition());
                    return isMatch;
                }, typeof(IConsumer<>)))
                .InstancePerHttpRequest();
        }

1 个答案:

答案 0 :(得分:1)

以下内容应该符合您的要求:

var openConsumerType = typeof(IConsumer<>);
var consumers = typeFinder.FindClassesOfType(openConsumerType).ToList();
container.RegisterTypes(consumers,
    t => t.GetInterfaces()
        .Where(i => i.IsGenericType && 
            openConsumerType.IsAssignableFrom(i.GetGenericTypeDefinition())),
     getLifetimeManager: t => new PerRequestLifetimeManager());

希望我对FindInterfaces方法的理解足够接近。

PerRequestLifetimeManager应相当于.InstancePerHttpRequest()