构造函数注入应用程序架构是错误的 - Ninject

时间:2015-08-11 13:57:51

标签: c# ninject

我正在使用Ninject,并使用构造函数注入:

我的问题的一个例子是

我的实现有两个接口。

1. IUsersProvider
2. ICompaniesProvider

我需要使用UsersProvider CompaniesProvider中的函数 来自CompaniesProvider

中的UsersProvider

所以我在两个类中都创建了构造函数:

    public class UsersProvider : IUsersProvider
    {
        private readonly ICompaniesProvider _companiesProvider;

        public UsersProvider(ICompaniesProvider companiesProvider)
        {
            _companiesProvider = companiesProvider;
        }
    }

    public class CompaniesProvider : ICompaniesProvider
    {
        private readonly IUsersProvider _usersProvider;

        public UsersProvider(IUsersProvider  usersProvider)
        {
            _usersProvider = usersProvider;
        }
    }

现在这段代码编译好了但是从架构的角度看这不正确(它看起来像一个循环引用)。运行此代码时,Ninject会抛出异常:

处理场景以使用另一个类中每个类的函数的最佳方法是什么?

1 个答案:

答案 0 :(得分:4)

处理这种情况的正确方法是重构一个或两个接口/类,以便它们不相互依赖。如果你发现自己处于这种情况,通常如果你发现自己处于这种情况,你的一个或两个课程做得太多,即违反单一责任原则,那么很难在没有看到每个细节的情况下提供更详细的建议。拆分界面所以它只做一件事,然后你的依赖关系应该清理。