在Web API 2中无法访问Unity DependencyResolver

本文关键字:访问 Unity DependencyResolver Web API | 更新日期: 2023-09-27 18:11:32

我正在遵循这个网站上描述的程序,以便为依赖注入设置一个Unity依赖解析器到我的一个控制器。下面的代码运行良好:

var container = new UnityContainer();
            container.RegisterType<IUnitOfWork, UnitOfWork>(new HierarchicalLifetimeManager());

上面的代码放在WebApiConfig Register(HttpConfiguration config)方法中。但是,指令还指定必须使用以下代码:

config.DependencyResolver = new DependencyResolver();

这就是问题所在:DependencyResolver()在当前上下文中不存在。我试过搜索这个,我也试过UnityDependencyResolver()也不存在。我正在使用(或尝试使用)名称空间:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Web.Http;
using Microsoft.Owin.Security.OAuth;
using Microsoft.Practices.Unity;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using URLShortener.Models;
using Microsoft.Practices.Unity;
using System.Web.Http.Dependencies;

DependencyResolver似乎不存在了,这让我很困惑。谢谢你。

在Web API 2中无法访问Unity DependencyResolver

说明指定您应该使用以下代码:

config.DependencyResolver = new UnityResolver(container);

UnityResolver类实现了IDependencyResolver接口

并添加UnityResolver类
using Microsoft.Practices.Unity;
using System;
using System.Collections.Generic;
using System.Web.Http.Dependencies;
public class UnityResolver : IDependencyResolver
{
    protected IUnityContainer container;
    public UnityResolver(IUnityContainer container)
    {
        if (container == null)
        {
            throw new ArgumentNullException("container");
        }
        this.container = container;
    }
    public object GetService(Type serviceType)
    {
        try
        {
            return container.Resolve(serviceType);
        }
        catch (ResolutionFailedException)
        {
            return null;
        }
    }
    public IEnumerable<object> GetServices(Type serviceType)
    {
        try
        {
            return container.ResolveAll(serviceType);
        }
        catch (ResolutionFailedException)
        {
            return new List<object>();
        }
    }
    public IDependencyScope BeginScope()
    {
        var child = container.CreateChildContainer();
        return new UnityResolver(child);
    }
    public void Dispose()
    {
        container.Dispose();
    }
}