【问题标题】:Dependency injection in simple ASP.NET Web API简单 ASP.NET Web API 中的依赖注入
【发布时间】:2014-04-04 14:30:20
【问题描述】:

我正在创建我的第一个 Web API,目前有以下代码:

public interface IRepository<T> where T : class
{
    T GetById(Int32 id, VehicleTypeEnum type);
}

public class VehicleRepository : IRepository<Vehicle>
{
    public VehicleRepository(DbContext dataContext) {}

    public Vehicle GetById(Int32 id, VehicleTypeEnum type)
    {
        try
        {
            switch (type)
            {
                case VehicleTypeEnum.Car:
                    // connect to WcfService1 to retrieve data
                case VehicleTypeEnum.Truck:
                    // connect to WcfService2 to retrieve data
                case VehicleTypeEnum.Motorcycle:
                    // connect to Database to retrieve data
            }
        }
        catch (Exception ex)
        {
            // log exception
        }
    }
}

public class VehicleController : ApiController
{
    private readonly IVehicleRepository _repository;

    public VehicleController(IVehicleRepository repository)
    {
        _repository = repository;
    }

    // GET api/vehicle/5
    public Vehicle GetVehicle(int id, VehicleTypeEnum type)
    {
        return _repository.GetById(id, type);
    }
}

正如您在 VehicleRepository 的 GetById 方法中看到的,我需要根据传入的 Enum 值调用不同的服务。 我想避免在每一种方法中都有这个开关盒。

有人告诉我,我可以使用 IoC / 依赖注入...已经尝试搜索简单的示例,但无法理解这个概念。

谁能告诉我如何简单地实现这一点?

【问题讨论】:

  • 你不能把switch移动到一个助手类吗?

标签: c# .net asp.net-mvc-4 asp.net-web-api


【解决方案1】:

这看起来像是几个候选策略之一的运行时选择或映射问题的简单示例。

至少有三种方法可以以与容器无关的方式做到这一点:

我个人的偏好是部分类型名称角色提示。

【讨论】:

    猜你喜欢
    • 2017-10-22
    • 2015-11-08
    • 2018-03-24
    • 2019-04-05
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多