Inversion of control IoC容器-注册实例组件

Inversion of control IoC容器-注册实例组件,inversion-of-control,instance,autofac,ioc-container,Inversion Of Control,Instance,Autofac,Ioc Container,我的问题是关于Autofac IOC容器中的实例注册。 在某些情况下,您可能希望预生成对象的实例,并将其添加到容器中,以供已注册组件使用。可以使用RegisterInstance方法执行此操作: var output = new StringWriter(); builder.RegisterInstance(output).As<TextWriter>(); var输出=新的StringWriter(); builder.RegisterInstance(output.As();

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

var output = new StringWriter();
builder.RegisterInstance(output).As<TextWriter>();
var输出=新的StringWriter();
builder.RegisterInstance(output.As();

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

典型示例是当您需要映射一个类型,但目标类型是单例(全局或特定上下文中)

例如,假设您希望注册,这是一个抽象类。虽然
UTF8Encoding
有一个公共构造函数,但注册可能更有效,因为它是一个单例

可能是这样的:

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

在这个特定的示例中,这只是一个性能优化,但在其他情况下,Singleton实例可能是唯一可用的实例,您必须这样做。

其他问题已删除。当询问堆栈溢出时,请每个问题只问一个问题。否则,你可能会得到几个答案,答案C是你第一个问题的最佳答案,而答案B是你第二个问题的最佳答案;那么,你应该选择哪个答案作为答案?如果您还有其他问题,请单独提问。非常感谢Mark的澄清。非常感谢。