2012-03-02 81 views

回答

3

有很多种不同的方式,都有优点和缺点。

首先,每个服务都是某种对象,所以你总是可以自己创建有问题的对象。你可能被迫处理很多引用,但这是可能的。这破坏了依赖注入的想法,所以这不是你应该做的!

第二种方式是注入到服务类:

class MyClass{ 

    public function __construct($session){ 
     // ... 
    } 
} 

class MyContainer extends Controller{ 

    public function SomeKindOfAction(){ 
     $myClass = new MyClass($this->get('session')); 
    } 
} 

如果你只是你的控制器中使用的类,这可能是好的。如果你有更多的嵌套关系,比如在MyClass中,你需要创建另一个类,你可能会遇到紧耦合(这是为了避免)以及复杂性问题。

最好的方法是创建自己的服务并在那里注入所需的东西。这里有很多文档,所以我只是举一个简单的例子来使用上面的MyClass。

services.yml: 

services: 
    my.myClass: 
     class: /Acme/DefaultBundle/MyStuff/MyClass 
     arguments: ["@session"] 

现在你的类是作为服务(谁也想不到,就是这么简单!),你可以使用它你的控制器内:

class MyContainer extends Controller{ 

    public function SomeKindOfAction(){ 
     $myClass = $this->get('my.myClass'); 
    } 
} 

现在你不必去想构造以及如何为了获得你的物品,DI容器会为你做。如果你想知道更多,请阅读here

+0

非常感谢 – falinsky 2012-03-02 13:59:24