Мне нужно выяснить, как внедрить реализацию интерфейса в себя.Как в примере ниже, где я хотел бы использовать метод add
рекурсивно.
Простой интерфейс с функцией добавления
public interface IRecursiveFactory
{
int Add(int number, int max = 10);
}
Внедрен в контейнер DI
container.For<IRecursiveFactory>().Use<RecursiveFactory>();
Это была бы очевидная реализация , но она не является рекурсивной
public class RecursiveFactory : IRecursiveFactory
{
public int Add(int number, int max = 10)
{
while (number < max)
{
number++;
Console.WriteLine(number);
}
return number;
}
}
Это рекурсивный пример, который не будет работать, он возвращает ошибку Activation error occurred while trying to get an instance of type IRecursiveFactory
public class RecursiveFactory : IRecursiveFactory
{
private readonly IRecursiveFactory _recursiveFactory;
// Inject "self"
public RecursiveFactory(IRecursiveFactory recursiveFactory)
{
_recursiveFactory = recursiveFactory;
}
public int Add(int number, int max = 10)
{
while (number < max)
{
// recurse
var newNumber = number + 1;
Console.WriteLine(newNumber);
number = _recursiveFactory.Add(newNumber);
}
return number;
}
}