Как использовать внедрение зависимостей в контроллере ASP. NET Web API 2 с использованием Unity? - PullRequest
1 голос
/ 30 марта 2020

В Visual Studio 2019 я создал проект веб-API ASP. NET. Я создал контроллер Web API 2. Я пошел по этой ссылке 1 и ссылке 2 , чтобы реализовать внедрение зависимостей с использованием Unity.

Я поделился кодом по ссылке 1, но он не работает. Я получаю ошибку в методе GetService(Type serviceType) из UnityResolver (который я скопировал из первой ссылки).

Ошибка:

Возникло исключение: 'Unity.ResolutionFailedException' в Unity .Container.dll

Я проверил это, используя точки останова. Он возвращает ноль, хотя контейнер не ноль.

Я так долго искал. Я не понимаю, где это неправильно, или я что-то не так сделал.

Я новичок в. NET Framework, а также в программировании. Любая помощь или совет приветствуется.

public object GetService(Type serviceType)
{
        try
        {
            return container.Resolve<Type>();
            //return container.Resolve(serviceType);
        }
        catch (ResolutionFailedException)
        {
            return null;
        }
}

MyAPIController.cs

public class MyAPIController : ApiController
{
    private IAgent agent;

    public MyAPIController (IAgent _agent)
    {
        this.agent= _agent;
    }

    [HttpPost]
    [Route("AgentService")]
    public string GetAgentServices([FromBody] InputData inputData)
    {
      return "nothing";
    }
 }

WebApiConfig.cs

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        var container = new UnityContainer();
        container.RegisterType<IAgent, Agent>();
        config.DependencyResolver = new UnityResolver(container);
        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

Global.asax.cs

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}
...