这两种在autofac中注册实例的方法有什么区别

时间:2013-05-22 12:54:16

标签: c# ioc-container autofac

这两个注册之间autofac的区别是什么:

builder.Register(c => Instance).As<ISomeInterface>();

builder.RegisterInstance(Instance).As<ISomeInterface>().SingleInstance().ExternallyOwned();

其中Instance是autofac模块的(非静态)属性,其中发生了注册,由对象初始化程序设置。

我的理由是前者已经在我调试的一段代码中完成,我得到了一些奇怪的行为,好像有两个ISomeInterface实例浮动。功能需求是实例在容器的生命周期中存活(=应用程序的生命周期)。

请不要告诉我,我不应该先做第一件事 - 它已经完成了,我正在努力理解可能出现的问题/结果会出现奇怪的行为。

1 个答案:

答案 0 :(得分:1)

这里有一个显着的区别。通过实例注册,Instance属性中的引用将在容器构建期间传递给Autofac 。未来的决策将始终得到相同的参考。

使用lambda变量,lambda将在每个解析上执行,允许Instance属性在解析时返回存储在属性中的任何引用。从理论上讲,您可以在应用程序的生命周期内更改Instance的内容,从而为更改后解析的使用者提供不同的引用。