2016-01-31 83 views
1

我的问题是关于Autofac IOC容器中的实例注册。 在某些情况下,您可能需要预先生成对象的实例并将其添加到容器以供注册组件使用。您可以使用RegisterInstance方法执行此操作:IoC容器 - 注册实例组件

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

什么是执行实例注册的典型场景示例,原因是什么?

+1

删除了其他问题。当询问堆栈溢出时,请每个问题只询问一个问题。否则,您可能会得到多个答案,并且*答案C *是您的第一个问题的最佳答案,但*答案B *是第二个问题的最佳答案;那么,你应该选择哪个答案作为答案?如果您还有其他问题,请将它们作为单独的问题询问。 –

回答

3

一个典型的例子是当你需要映射一个类型,但目标类型是一个单例(全局或特定的上下文)。

想象一下,例如,您希望将Encoding(抽象类)注册到UTF8Encoding。虽然UTF8Encoding有一个公共构造函数,但注册Encoding.UTF8可能更有效,该变量是Singleton。

这可能是这样的:

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

在这个特殊的例子,它只是一个性能优化,但在其他情况下,Singleton实例可能是唯一可用的实例,而且你去做这个。

+0

非常感谢马克的澄清。非常感激。 –