我们的任务是重构使用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();
}
答案 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()