Я получаю DependencyResolutionException
, пытающийся использовать Autofac's parameterized instantiation для разрешения непрямой связи.Косвенная параметризованная инстанция с использованием Autofac
Предположим, у меня есть следующие классы:
public interface IMuffin {}
public class Muffin : IMuffin
{
public Muffin(IButter butter) {}
}
public interface IButter {}
public class Butter : IButter
{
public Butter(IKnife knife) {}
}
public interface IKnife {}
Теперь предположим, что Я хочу IMuffin
, но я хочу поставить IKnife
зависимость в качестве параметра, например:
public class Breakfast
{
public Breakfast(Func<IKnife, IMuffin> muffinFactory)
{
var muffin = muffinFactory(new Knife());
}
private class Knife : IKnife {}
}
Проблема заключается в том, Я получаю исключение на muffinFactory(new Knife())
, жалуясь, что фабрика не может разрешить зависимость IKnife
конструктора Butter
, используя доступные параметры и службы. Это не имеет никакого смысла, поскольку я представил экземпляр IKnife
в качестве параметра для фабрики.
Кажется, что это должно сработать. Что мне не хватает?
Это [FAQ рассматривается в документации] (http://autofac.readthedocs.io/en/latest/faq/injecting-global -parameters.html). –
Хорошо, я вижу, откуда они идут, но использование параметризованного экземпляра для зависимостей _direct_ связано с некоторыми «знаниями». И только один небольшой рефакторинг превращает прямую зависимость в косвенную. На самом деле это произошло в моем случае. Используя вышеприведенный пример, предположим, что 'Muffin' первоначально зависел от' IKnife' напрямую, поэтому параметризованное создание экземпляра 'Breakfast' будет работать. Когда «Масло» было учтено, «IKnife» стал косвенной зависимостью, которая сломала «Завтрак». Такое изменение может не повлиять на потребителей IMuffin. –