我已经在MVC Web应用程序中使用了Ninject,而注入(inject)业务逻辑类没有任何问题。但是我想将数据访问类注入(inject)到业务逻辑类的构造函数中。逻辑层是一个类库,没有Program.cs类或入口点。

资料存取类别

 public class DataAccessClass
 {
   public void Insert(Product product)
    {
        new SqlObj().Insert(Product);
    }
 }

数据访问类接口(interface)
 public Interface IDataAccessClass()
 {
   void Insert(Product product);
 }

业务逻辑课
 public class ProductLogic()
 {
     IDataAccessClass _dataAccessClass;

    //DataAccessClass should be injected here using Ninject
     public ProductLogic(IDataAccessClass dataAccessClass)
     {
        _dataAccessClass=dataAccessClass;
     }
     public InsertProduct(Product product)
     {
         _dataAccessClass.Insert(product);
     }
 }

这就是我所需要的
我有一个三层应用程序,这些层是:
  • Web:表示层(ASP.NET MVC)->仅看到BLL
  • BLL:业务逻辑层->仅看到DAL
  • DAL:数据访问层

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

    最佳答案

    用Nuget安装NInject

    Install-Package Ninject
    

    您可以创建一种方法来注册对象。您需要注册创建对象所需的所有依赖关系。
    public static void Register(IKernel kernel)
    {
        kernel.Bind<IDataAccessClass>().To<DataAccessClass>();
        kernel.Bind<ProductLogic>().ToSelf();
    }
    

    创建一个StandardKernel的新实例,并调用Register来注册对象。

    要获取对象的实例,只需调用Get<>方法,您将获得该对象的新实例。还有其他方法。
    static void Main(string[] args)
    {
        var kernel = new StandardKernel();
        Register(kernel); // register the objects
    
        var productLogic = kernel.Get<ProductLogic>(); // create instance
    }
    

    要解决该问题,只有BLL可以看到DAL,您可以在安装NInject并创建该Register方法的地方添加一个新项目(类库)。您可以在Web项目中引用该类库并注册实体。

    对象
    public class Product
    {
    }
    
    public class DataAccessClass : IDataAccessClass
    {
        public void Insert(Product product)
        {
    
        }
    }
    
    public interface IDataAccessClass
    {
        void Insert(Product product);
    }
    
    
    public class ProductLogic
    {
        IDataAccessClass _dataAccessClass;
    
        //DataAccessClass should be injected here using Ninject
        public ProductLogic(IDataAccessClass dataAccessClass)
        {
            _dataAccessClass = dataAccessClass;
        }
        public void InsertProduct(Product product)
        {
            _dataAccessClass.Insert(product);
        }
    }
    

    关于c# - 如何在C#类库中使用Ninject,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29718365/

    10-16 01:00