C# config.DependencyResolver=new UnityResolver(容器)上出现强制转换错误;

C# config.DependencyResolver=new UnityResolver(容器)上出现强制转换错误;,c#,dependency-injection,asp.net-web-api2,unity-container,C#,Dependency Injection,Asp.net Web Api2,Unity Container,我试图通过unity容器在我的WebAPI项目中使用依赖项注入,但我遇到了编译时异常 “无法将类型“APIntegrationApp.UnityResolver”隐式转换为“System.Web.Http.Dependencies.IDependencyResolver”。存在显式转换(是否缺少强制转换?) 我指的是我的实施这个链接 var container=newunitycontainer(); RegisterType(新的层次结构CallifetimeManager()); conf

我试图通过unity容器在我的WebAPI项目中使用依赖项注入,但我遇到了编译时异常

“无法将类型“APIntegrationApp.UnityResolver”隐式转换为“System.Web.Http.Dependencies.IDependencyResolver”。存在显式转换(是否缺少强制转换?)

我指的是我的实施这个链接

var container=newunitycontainer();
RegisterType(新的层次结构CallifetimeManager());
config.DependencyResolver=新的UnityResolver(容器);
以下是我的IDependencyResolver接口和unityresolver类定义

public interface IDependencyResolver : IDependencyScope, IDisposable
{
    IDependencyScope BeginScope();
}

public interface IDependencyScope : IDisposable
{
    object GetService(Type serviceType);
    IEnumerable<object> GetServices(Type serviceType);
}

 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()
    {
        Dispose(true);
    }

    protected virtual void Dispose(bool disposing)
    {
        container.Dispose();
    }
}
公共接口IDependencyResolver:IDependencyScope,IDisposable
{
IDependencyScope BeginScope();
}
公共接口IDependencyScope:IDisposable
{
对象GetService(类型serviceType);
IEnumerable GetServices(类型serviceType);
}
公共类UnityResolver:IDependencyResolver
{
受保护的IUnity容器;
公共单元Resolver(IUnityContainer容器)
{
if(容器==null)
{
抛出新的ArgumentNullException(“容器”);
}
this.container=容器;
}
公共对象GetService(类型serviceType)
{
尝试
{
返回容器解析(serviceType);
}
捕获(解决失败异常)
{
返回null;
}
}
公共IEnumerable GetServices(类型serviceType)
{
尝试
{
返回容器.ResolveAll(serviceType);
}
捕获(解决失败异常)
{
返回新列表();
}
}
公共IDependencyScope BeginScope()
{
var child=container.CreateChildContainer();
返回新的UnityResolver(子项);
}
公共空间处置()
{
处置(真实);
}
受保护的虚拟void Dispose(bool disposing)
{
container.Dispose();
}
}

引发此错误通常是因为类型不匹配(想想
int myInt='some string'
),或者某个特定类没有从预期的接口继承。下面的示例显示了这一点:

public interface IClassA
{
    void DoSomething();
}

public class ClassA
{
    public void DoSomething()
    {
        // do something here
    }
}

public class Program
{
    static void Main(string[] args)
    {
        IClassA obj = new ClassA(); // throws error because ClassA doesn't inherit from IClassA
    }
}

这个问题的解决方案就是继承所需的接口这在依赖项注入中很常见。

请共享
UnityResolver
类的前27行。我已经共享了类定义。问题是您已经编写了自己的
IDependencyResolver
IDependencyScope
接口。你不应该那样做。你应该去掉这两个。这两个接口是内置的-因此,您的错误消息会显示
System.Web.Http.Dependencies.IDependencyResolver
。即使从单元容器类中删除这两个接口,我仍然会得到相同的强制转换错误
公共类UnityResolver:IDependencyResolver
。右键单击
idependencysolver
,然后单击
转到定义。它带你到什么界面?在什么命名空间中?
public interface IClassA
{
    void DoSomething();
}

public class ClassA
{
    public void DoSomething()
    {
        // do something here
    }
}

public class Program
{
    static void Main(string[] args)
    {
        IClassA obj = new ClassA(); // throws error because ClassA doesn't inherit from IClassA
    }
}