依赖注入:如何通过注射容器?

时间:2010-03-29 17:21:44

标签: c# .net dependency-injection inversion-of-control

(这个问题并不依赖于特定的IoC框架,所以我的示例中的接口和类型都是元类型。只需用你喜欢的IoC框架的相应类型替换它们。)

在我的主要方法中,我通常设置我的容器做这样的事情:

static void Main()
{
    IInjector in = new Injector();
    in.Register<ISomeType>().For<SomeType>();
    in.Register<IOtherType().For<OtherType>();
    ...

    // Run actual application
    App app = in.Resolve<App>();
    app.Run();
}

我的问题是,你是如何得到注射器的?我通常只是自己注册了注射器并注入了自己注射的类型,但我不确定这是否是正确的“模式”。

2 个答案:

答案 0 :(得分:14)

你不应该传递容器。

相反,您的入口点/ main方法会向容器询问它需要启动的对象 - 例如您的App对象/ bean。然后容器返回连接到App的完整对象图,这允许您运行app.Run(),同时满足所有依赖项。

对于要知道容器的对象,或者每个对象要求容器获取它的依赖性,这是一种反模式 - 如果你这样做,那么你有倒置控制和你拥有的不是依赖注入 - 你仍然有对象要求他们需要什么,而不是给他们需要的东西。

答案 1 :(得分:2)

最好避免注射注射器。只需创建所需的类型,然后开始执行。我在这个主题上撰写了一篇更长篇文章:Accessing the DI container