我已经在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
层对我的DAL
层一无所知。我的DAL
中有存储库接口(interface)和具体类,它们在业务逻辑类的BLL
层中使用。问题是,为了使DAL
和BLL
脱钩,如何设置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/