0

我创建了一个NinjectDependencyResolver非常适合将依赖项注入控制器的类。我知道您可以链接依赖项,但我的问题是我在控制器中实例化一个类,然后实例化另一个类。第三类需要注入其他依赖项,例如:

public class MyController : Controller {
    MyObject obj;
    public MyController(IMyFirstDependency dependency) {
        obj = new MyObject(dependency);
    }
}

class MyObject {
    MyOtherObject otherObj;
    public MyObject(IMyFirstDependency dependency) {
        otherObj = new MyOtherObject(??????);
    }
}

class MyOtherObject {
    public MyOtherObject(IMySecondDependency dependencyTwo)
    {
        // do something with dependencyTwo
    }
}

注入dependencyTwo的最佳方法是什么?我是否需要将它包含在构造函数中MyObject以便我可以使用链接功能,还是有其他方法?

4

1 回答 1

3

您可以MyObject采取其他依赖项:

class MyObject {
    MyOtherObject otherObj;
    public MyObject(IMyFirstDependency dependency, IMySecondDependency dependencyTwo) {
        otherObj = new MyOtherObject(dependencyTwo);
    }
}

现在你只需要在内核中注册这个依赖:

kernel.Bind<IMySecondDependency>().To<MyConcreteSecondDependency >();

但通常你不应该需要这 2 个包装对象并在它们的构造函数 (MyObjectMyOtherObject) 中进行一些手动实例化。您可以直接使用控制器中的接口。我真的没有看到这些物体的任何意义。如果它们应该充当聚合您的存储库的某些服务类,那很好,只需围绕它们定义一个抽象并让您的控制器直接采用此服务类:

public class MyController : Controller {

    private readonly IMyService myService;
    public MyController(IMyService myService) {
        this.myService = myService;
    }

    public ActionResult Index() {
        // you could use your service layer here with this.myService
    }

}
于 2013-02-03T17:28:22.913 回答