C# config.DependencyResolver=new UnityResolver(容器)上出现强制转换错误;
我试图通过unity容器在我的WebAPI项目中使用依赖项注入,但我遇到了编译时异常 “无法将类型“APIntegrationApp.UnityResolver”隐式转换为“System.Web.Http.Dependencies.IDependencyResolver”。存在显式转换(是否缺少强制转换?) 我指的是我的实施这个链接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
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
}
}