2016-01-31 2 views
1

Мой вопрос касается регистрации экземпляра в контейнере Autofac IOC. В некоторых случаях вы можете предварительно создать экземпляр объекта и добавить его в контейнер для использования зарегистрированными компонентами. Вы можете сделать это, используя метод RegisterInstance:Контейнер IoC - зарегистрированные компоненты экземпляра

var output = new StringWriter(); 
builder.RegisterInstance(output).As<TextWriter>(); 

Каков будет типичный пример сценария регистрации экземпляра и почему?

+1

Дополнительный вопрос удален. Когда вы спрашиваете о переполнении стека, задайте только один вопрос на вопрос. В противном случае вы можете получить несколько ответов, и * Ответ C * - лучший ответ на ваш первый вопрос, но * ответ B * - лучший ответ на ваш второй вопрос; то, какой ответ вы должны выбрать как * ответ? Если у вас есть дополнительные вопросы, задайте их как отдельные вопросы. –

ответ

3

Типичным примером может быть, когда вам нужно сопоставить тип, но тип назначения - Singleton (либо глобально, либо в определенном контексте).

Представьте, например, что вы хотите зарегистрировать Encoding, что является абстрактным классом, до UTF8Encoding. В то время как UTF8Encoding имеет открытый конструктор, возможно, было бы более эффективно регистрировать Encoding.UTF8, который является Singleton.

Это может выглядеть следующим образом:

builder.RegisterInstance(Encoding.UTF8).As<Encoding>(); 

В этом конкретном примере, это только оптимизация производительности, но и в других случаях, экземпляр Singleton может быть единственным доступным экземпляр, и вы бы иметь сделать это.

+0

Большое спасибо Марк за разъяснение. Очень признателен. –

Смежные вопросы