У меня есть следующий вариант использования:
Я создал структуру универсальной конечной точки в своем проекте ASP.NET Core WebAPi.
И теперь я хочу написать метод расширения для ServiceCollection
, чтобы легко зарегистрировать мои Endpoint
в DI.
Сейчас я постараюсь продемонстрировать то, что я хочу. Допустим, у нас есть:
interface IEndPoint<TInput, TOutput>
{
TOutput Execute(TInput input);
}
class StrToIntEndPoint : IEndPoint<string, int>
{
public int Execute(string input)
{
return int.Parse(input);
}
}
class ServiceCollection { }
static class ServiceCollectionServiceExtensions
{
public static void AddScoped<TService, TImplementation>(this ServiceCollection services) where TImplementation : TService
{
}
}
static class MyCustomExt
{
// Here, I have to add TInput, TOutput type parameters to AddEndpoint method too.
public static void AddEndpoint<T, TInput, TOutput>(this ServiceCollection services) where T: IEndPoint<TInput, TOutput>
{
services.AddScoped<IEndPoint<TInput, TOutput>, T>();
}
}
class Program
{
static void Main()
{
var services = new ServiceCollection();
// Compile Error: Incorrect number of type parameters
services.AddEndpoint<StrToIntEndPoint>();
// fine
services.AddEndpoint<StrToIntEndPoint, string, int>();
}
}
Мой вопрос: почему компилятор не разрешает string
и int
как параметры типа для AddEndpoint
, ссылаясь на StrToIntEndPoint
?