Я хочу зарегистрировать универсальный делегат, который разрешается во время выполнения, но я не могу найти способ сделать это для универсальных шаблонов.
Дан делегат, который выглядит следующим образом:
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 - возможно, мне просто что-то не хватает. Я знаю, что могу сделать это с помощью универсального объекта или интерфейса, но я хочу придерживаться легкости делегата. Это делает модульное тестирование очень простым при их внедрении.
Есть мысли? В настоящий момент мне приходится выполнять дискретную регистрацию (по одной на комбинацию типов, без дженериков).