gpt4 book ai didi

c# - 使用 Ninject 的 .NET MVC 依赖注入(inject)

转载 作者:可可西里 更新时间:2023-11-01 08:40:39 25 4
gpt4 key购买 nike

我刚刚开始使用 .NET 进行编程,但在实现依赖注入(inject)(使用 Ninject) 时遇到了一些问题。

我正在创建某种餐饮应用程序,用户可以在其中浏览城镇,在城镇中浏览餐馆,在餐馆中浏览食物。

我正在使用 UnitOfWork 和存储库模式,例如我通过 id 访问城镇:

_unitOfWork.TownRepository.GetByID(id);

现在我开始将服务实现到应用程序中,并且遇到了依赖注入(inject)的需求。

我已经创建了 ITownServiceIRestaurantServiceIFoodService(因为我已经创建了 TownRepositoryRestaurantRepository FoodRepository 在我的 UnitOfWork 中。

TownService 的示异常(exception)观:

public class TownService : ITownService
{
// initialize UnitOfWork
private IUnitOfWork _unitOfWork;

public TownService()
: this(new UnitOfWork())
{
}

public TownService(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}

public Town GetByID(object id)
{
return _unitOfWork.TownRepository.GetByID(id);
}

public IEnumerable<Town> GetAll()
{
return _unitOfWork.TownRepository.Get();
}

public bool Insert(Town town)
{
// validation logic
if (!ValidateTown(town))
return false;

try
{
_unitOfWork.TownRepository.Insert(town);
_unitOfWork.Save();
}
catch
{
return false;
}

return true;
}

public bool Delete(object id)
{
try
{
_unitOfWork.TownRepository.Delete(id);
_unitOfWork.Save();
}
catch
{
return false;
}

return true;
}

public bool Update(Town townToUpdate)
{
// validation logic
if (!ValidateTown(townToUpdate))
return false;

try
{
_unitOfWork.TownRepository.Update(townToUpdate);
_unitOfWork.Save();
}
catch
{
return false;
}

return true;
}
}

我还没有实现 FoodServiceRestaurantService,但它们应该与我拥有的一些附加方法 exepct 当然相似。例如,在 RestaurantService 中,我可能有 public Restaurant GetRestaurantsInTown(Town town){} 或类似的东西。

希望您对应用程序有所了解。现在让我们回到 Ninject

在我的 TownController 中,我会有这样的东西:

 public class TownController : Controller
{

private ITownService _townService;

public TownController(ITownService townService)
{
_townService = townService;
}
}

RestaurantControllerFoodController 类似,当然只是构造函数注入(inject)。

如何在这样的例子中使用Ninject?我是否需要一些全局的 IService 而不是 ITownServiceIRestaurantServiceIFoodService 我将在 中继承TownServiceRestaurantServiceFoodService 或者这样可以吗?

绑定(bind)时需要绑定(bind)什么?

kernel.Bind<IUnitOfWork>().To<UnitOfWork>();
kernel.Bind<ITownService>().To<TownService>();
kernel.Bind<IRestaurantService>().To<RestaurantService>();
kernel.Bind<IFoodService>().To<TownService>();

是这样的吗?

简而言之 - 使用 Ninject 添加依赖项注入(inject)需要什么?

我真的有这方面的问题,需要帮助。

非常感谢转发。

最佳答案

从包管理器控制台运行这个命令:

Install-package Ninject.MVC3

这将向 App_Start/NinjectWebCommon.cs 添加一个类

如果你看靠近底部,有一个 RegisterServices 方法。

您只需在此处添加问题中的代码,即

    private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IUnitOfWork>().To<UnitOfWork>();
kernel.Bind<ITownService>().To<TownService>();
kernel.Bind<IRestaurantService>().To<RestaurantService>();
kernel.Bind<IFoodService>().To<TownService>();
}

关于c# - 使用 Ninject 的 .NET MVC 依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21524823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com