c# - 在 config.DependencyResolver = new UnityResolver(container); 上出现转换错误
问题描述
我正在尝试通过统一容器在我的 web api 项目中使用依赖注入,但我得到了编译时异常
“无法将类型 'APIIntegrationApp.UnityResolver' 隐式转换为 'System.Web.Http.Dependencies.IDependencyResolver'。存在显式转换(您是否缺少演员表?)”
我指的是这个链接我的实现
https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/dependency-injection
var container = new UnityContainer();
container.RegisterType<IMFOCustomerRepository, MFOCustomerRepository>(new HierarchicalLifetimeManager());
config.DependencyResolver = new UnityResolver(container);
这是我的 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();
}
}
解决方案
通常会抛出此错误,因为存在类型不匹配(认为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
}
}
这个问题的解决方案只是继承依赖注入中常见的所需接口。
推荐阅读
- c# - 运行 ServiceHost 时不能同时支持 http 和 https url
- javascript - 我如何知道动态号码并将其添加到动态号码中?javascript
- javascript - 数据表默认列排序
- python - Django:如何根据我在views.py中的功能显示不同的图像
- system-verilog - 在 systemverilog 中使用“with”运算符是唯一的
- javascript - 如何调整以使版主不能为每个目标容器添加超过 4 个输入
- java - 无法使用 Java JDBC 连接到 MySQL 数据库
- git - git cvsimport:“远程”指的是什么?
- java - 动态更新实时事件的文本字段
- php - 仅图像上的 curl 身份验证错误