使用控制反转构造与调用方的依赖关系



给定以下 ASP.NET 核心控制器:

public class MyController : Controller {
    public MyController(IDependency dependency) { this.dependency = dependency; }
}
public interface IDependency;
public class DependencyImplementation : IDependency {
    public DependencyImplementation(Controller controller) { ... }
}

我希望MyController有一个注入DependencyImplementation的新实例,使用它被传递到的控制器构建。理想情况下使用Ninject。

非 IoC 版本将是:

public class MyController : Controller {
    public MyController() { this.dependency = new DependencyImplementation(this); }
}

这将导致循环依赖。我唯一的想法是介绍工厂:

public interface IDependencyFactory
{
    IDependency Create(Controller controller);
}
public class MyController : Controller
{
    private IDependency dependency;
    public MyController(IDependencyFactory dependencyFactory)
    {
        this.dependency = dependencyFactory.Create(this);
    }
}
var kernel = new StandardKernel();
kernel.Bind<Controller>().To<MyController>();
kernel.Bind<IDependency>().To<DependencyImplementation>();
kernel.Bind<IDependencyFactory>().ToFactory();
var controller = kernel.Get<Controller>();

或者更确切地说,重新考虑整个设计。

最新更新