1

我们制作了一个可以被各种 IoC 容器支持的工具包,该工具包完全与 IoC 无关,我们为不同的容器提供基本支持。我们目前正在努力支持 Autofac,我们需要的是允许最终用户覆盖我们的配置,部分是基于约定的。

我将解释 Windsor 会发生什么,以便了解 Autofac 是否有类似的机制。

该工具包提供了一组内置服务/组件,这些服务/组件“自动”注册在最终用户容器中。在 Windsor 中,我们将所有内容都注册为“Fallback”,这样如果用户使用与“默认”相同的服务注册某些内容,则用户组件将被解析为覆盖我们的注册。

这种方法的有趣之处在于,无论组件注册的顺序如何,它都能正常工作。

有什么方法可以使用 Autofac 实现相同的行为?.m

4

2 回答 2

1

我认为您正在寻找PreserveExistingDefaults扩展名。您可以在 Autofac wiki 中阅读有关它的更多信息:https ://code.google.com/p/autofac/wiki/ComponentCreation

于 2013-05-19T15:15:59.900 回答
-1

如果完全移除 IOC 容器会发生什么?

您可能需要在这里使用不同的模式。如果你想要一个容器不可知的默认注册,你需要考虑代码本身是容器不可知的,没有在容器中注册的后备。

您可以使用穷人 DI。(虽然,您可能希望在一个地方编排这些默认依赖项的创建和替换,因此以下可能不合适,但工厂可以处理)。

public SomeConstructor(IService service)
{
    if(service == null)
    {
        service = new DefaultService();
    }
}
于 2013-05-19T12:06:02.913 回答