Я знаю, что некоторые структуры DI поддерживают это (например, Ninject ), но я специально хочу знать, возможно ли это с Autofac .
Я хочу иметь возможность запросить у контейнера Autofac конкретный класс и получить экземпляр со всеми соответствующими зависимостями конструктора, , даже не зарегистрировав этот конкретный класс. Т.е., если я никогда не свяжу его в явном виде автоматически привязывает конкретный класс к себе, как если бы я позвонил builder.Register<MyClass>();
Хорошим примером того, когда это будет полезно, являются ViewModels. В MVVM расслоение таково, что только View зависит от ViewModel, и это происходит через свободную типизацию, и вы все равно не тестируете модульно View. Таким образом, нет необходимости макетировать ViewModel для тестов - и, следовательно, нет причин иметь интерфейс для каждой ViewModel. Таким образом, в этом случае обычный шаблон DI «зарегистрировать этот интерфейс для разрешения этого класса» является ненужной сложностью. Явное самообязание, такое как builder.Register<MyClass>();
, также кажется ненужным шагом при работе с чем-то таким простым, как конкретный класс.
Мне известен пример регистрации на основе отражений в документах Autofac, но мне это тоже не по вкусу. Я не хочу сложности (и медлительности) регистрации каждого возможного класса заранее; Я хочу, чтобы рамки давали мне то, что мне нужно, когда мне это нужно. Соглашение о конфигурации и все такое.
Есть ли способ настроить Autofac, чтобы он мог сказать: «О, это конкретный тип, и никто еще не зарегистрировал его, поэтому я просто буду вести себя так, как будто он был зарегистрирован с настройками по умолчанию»?