У меня есть следующие методы расширения:
public static IFoo Foo(this IFluentApi api, Action action);
public static IFoo<TResult> Foo<TResult>(
this IFluentApi api, Func<TResult> func);
public static IBar Bar(this IFoo foo);
public static void FooBar(this IBar bar, Action action);
public static void FooBar<TResult>( // <- this one cannot work as desired
this IBar bar, Action<TResult> action);
Общие интерфейсы всегда выводятся из их соответствующего не общего интерфейса.
К сожалению, для выполнения этой работы:
api.Foo(x => ReturnLong())
.Bar()
.FooBar(x => ...); // x should be of type long
Мне также необходимо реализовать следующий метод расширения:
public static IBar<TResult> Bar<TResult> (this IFoo<TResult> foo);
и измените последний из указанных выше методов расширения на:
public static void FooBar<TResult>(
this IBar<TResult> bar, Action<TResult> action);
Поскольку у меня на самом деле не только Bar()
между Foo()
и FooBar()
, но и ОЧЕНЬ длинная цепочка методов, у меня были бы огромные дополнительные затраты на внедрение.
Есть ли способ избежать этой проблемы и "волшебным образом" передать общий параметр TResult
?
Изменить:
Без потери вывода типа!