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