Можно ли зарегистрировать открытый универсальный делегат в autofac?

Я хочу зарегистрировать универсальный делегат, который разрешается во время выполнения, но я не могу найти способ сделать это для универсальных шаблонов.

Дан делегат, который выглядит следующим образом:

public delegate TOutput Pipe<in TInput, out TOutput>(TInput input);

И дан дискретно зарегистрированный делегат, который выглядит следующим образом:

public class AnonymousPipe<TInput, TOutput>
{
   public Pipe<TInput, TOutput> GetPipe(IContext context)
   {...}

Я хочу зарегистрировать функцию, подобную этой:

builder.RegisterGeneric(typeof(Pipe<,>)).As(ctx => 
{
   var typeArray = ctx.RequestedType.GetGenericArguments();
   // this can be memoized 
   var pipeDefinition = ctx.Resolve(typeof(AnonymousPipe<,>).MakeGenericType(typeArray));

   return pipeDefinition.GetPipe(ctx);

Я не могу найти способ предоставить реализация универсального параметра в качестве параметра в Autofac - возможно, мне просто что-то не хватает. Я знаю, что могу сделать это с помощью универсального объекта или интерфейса, но я хочу придерживаться легкости делегата. Это делает модульное тестирование очень простым при их внедрении.

Есть мысли? В настоящий момент мне приходится выполнять дискретную регистрацию (по одной на комбинацию типов, без дженериков).

5
задан S. Hebert 2 November 2011 в 21:17
поделиться