无法在 Web API 2 中访问 Unity DependencyResolver

the*_*ian 2 c# dependency-injection unity-container unit-of-work asp.net-web-api

我正在按照本网站上描述的程序设置一个 Unity Dependency Resolver,以便将依赖注入到我的一个控制器中。这段代码工作正常:

var container = new UnityContainer();
            container.RegisterType<IUnitOfWork, UnitOfWork>(new HierarchicalLifetimeManager());
Run Code Online (Sandbox Code Playgroud)

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

config.DependencyResolver = new DependencyResolver();
Run Code Online (Sandbox Code Playgroud)

这就是问题所在: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;
Run Code Online (Sandbox Code Playgroud)

DependencyResolver 似乎不再存在,这让我感到困惑。谢谢你。

Mar*_*und 5

该指令规定,你应使用此代码:

config.DependencyResolver = new UnityResolver(container);
Run Code Online (Sandbox Code Playgroud)

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 太好了谢谢!指令对我来说不是很清楚,我必须真正*创建*这个类。 (2认同)