我有一个三层应用程序,这些层是:

  • Web:表示层(ASP.NET MVC)->仅看到BLL
  • BLL:业务逻辑层->仅看到DAL
  • DAL:数据访问层

  • 因此,Web层对我的DAL层一无所知。我的DAL中有存储库接口(interface)和具体类,它们在业务逻辑类的BLL层中使用。问题是,为了使DALBLL脱钩,如何设置Ninject将存储库实现注入(inject)BLL层?

    对于Web层和BLL层,存在相同的问题,我在BLL层中使用了Web的接口(interface)和实现,应该如何为此设置Niject?

    最佳答案

    这个想法是为DAL和BLL定义接口(interface)。然后,您将此类接口(interface)的实例用作构造函数参数。例

    interface IDatabase
    {
        // Methods here
    }
    

    您的BLL类(class):
    public class Bll
    {
        IDatabase _db;
        public Bll(IDatabase db)
        {
            _db = db;
        }
    
        public void SomeMethod()
        {
            // Use db here
        }
    }
    

    然后,在您的合成根目录(在Web应用程序中)中,使用内核配置以下依赖关系:
     kernel.Bind<IDatabase>().To<ConcreteDatabase();
    

    从 Controller 到BLL,您都需要相同的东西,但是工作方式相同。

    除此之外,我认为您的依赖项没有正确设置。通常,您不需要这些垂直依赖性。您应该针对更扁平的层次结构。我写了一篇关于此的博客文章:http://www.kenneth-truyers.net/2013/05/12/the-n-layer-myth-and-basic-dependency-injection/

    在我的博客文章中,我解释了这种层次结构存在的问题以及如何避免这种问题。除此之外,它准确地描述了您的问题:ASP.NET MVC,BLL,DLL和Ninject将其 bundle 在一起。

    关于c# - 3层asp.net MVC应用程序中的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22276523/

    10-12 22:26