C# Unity容器解析失败异常ASP.NET Web API 2
我有一个使用Unity 5.11的ASP.Net应用程序,它是以标准方式设置的 使用UnityResolver实现IDependencyResolver,尽管我在GetService上遇到了很多异常 我目前正在忽略某些我没有注入的接口,正如您将在代码中看到的那样。我对下面的方法不是特别满意,有没有办法阻止Unity/ASP.net请求从Unity注入这些接口 值得注意的是,我所有的依赖项都被注入到了非常好的状态,我只是想知道是否有一种方法可以阻止抛出这些异常,因为我希望它会对性能造成某种损害C# Unity容器解析失败异常ASP.NET Web API 2,c#,asp.net,.net,asp.net-mvc,unity-container,C#,Asp.net,.net,Asp.net Mvc,Unity Container,我有一个使用Unity 5.11的ASP.Net应用程序,它是以标准方式设置的 使用UnityResolver实现IDependencyResolver,尽管我在GetService上遇到了很多异常 我目前正在忽略某些我没有注入的接口,正如您将在代码中看到的那样。我对下面的方法不是特别满意,有没有办法阻止Unity/ASP.net请求从Unity注入这些接口 值得注意的是,我所有的依赖项都被注入到了非常好的状态,我只是想知道是否有一种方法可以阻止抛出这些异常,因为我希望它会对性能造成某种损害 p
public class UnityResolver : IDependencyResolver
{
private static readonly ILog Log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
/// <summary>
///
/// </summary>
protected IUnityContainer container;
/// <summary>
///
/// </summary>
/// <param name="container"></param>
public UnityResolver(IUnityContainer container)
{
Log.Info($"Initializing a container");
this.container = container ?? throw new ArgumentNullException("container");
}
/// <summary>
///
/// </summary>
/// <param name="serviceType"></param>
/// <returns></returns>
public object GetService(Type serviceType)
{
try
{
return container.Resolve(serviceType);
}
catch (ResolutionFailedException ex)
{
var msgToLower = ex.Message.ToLowerInvariant();
if (!msgToLower.Contains("ihttpcontrollerselector") &&
!msgToLower.Contains("ihttpcontrolleractivator") &&
!msgToLower.Contains("ihttpactionselector") &&
!msgToLower.Contains("ihttpactioninvoker") &&
!msgToLower.Contains("icontentnegotiator") &&
!msgToLower.Contains("iexceptionhandler") &&
!msgToLower.Contains("modelmetadataprovider") &&
!msgToLower.Contains("imodelvalidatorcache") &&
!msgToLower.Contains("iapioutputcache") &&
!msgToLower.Contains("icachekeygenerator"))
{
Log.Error($"Get service entity {serviceType.Name} failed {ex.Message}");
}
return null;
}
}
/// <summary>
///
/// </summary>
/// <param name="serviceType"></param>
/// <returns></returns>
public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return container.ResolveAll(serviceType);
}
catch (ResolutionFailedException ex)
{
Log.Error($"Get services entity failed {ex.Message}");
return new List<object>();
}
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public IDependencyScope BeginScope()
{
var child = container.CreateChildContainer();
return new UnityResolver(child);
}
/// <summary>
///
/// </summary>
public void Dispose()
{
Dispose(true);
}
/// <summary>
///
/// </summary>
/// <param name="disposing"></param>
protected virtual void Dispose(bool disposing)
{
container.Dispose();
}
}
现在是我的UnityConfig.cs
public static void RegisterComponents(HttpConfiguration config)
{
//Dependency container
var container = new UnityContainer();
... register my Types, Singletons etc
config.DependencyResolver = new UnityResolver(container);
}
和一个测试控制器
[RoutePrefix("api/testing")]
public class TestController : ApiController
{
private readonly IDatabaseConfigService _dbConfigService;
private static readonly ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
/// <summary>
/// Test controller
/// </summary>
public TestController(IDatabaseConfigService dbConfigService)
{
_dbConfigService = dbConfigService;
}
}
[RoutePrefix(“api/测试”)]
公共类TestController:ApicController
{
专用只读IDatabaseConfigService\u dbConfigService;
私有静态只读ILog Log=LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
///
///测试控制器
///
公共测试控制器(IDatabaseConfigService dbConfigService)
{
_dbConfigService=dbConfigService;
}
}
当我删除字符串比较时,下面显示了一些异常消息
2020-07-24 08:06:37092[12]错误Api.Containers.UnityResolver[GetService Api.Containers.UnityResolver]-获取服务实体IHostBufferPolicySelector失败当前类型System.Web.Http.Hosting.IHostBufferPolicySelector是一个接口,无法构造。是否缺少类型映射
在执行以下操作时发生异常: •解析时:IHostBufferPolicySelector 2020-07-24 08:06:37117[12]错误Api.Containers.UnityResolver[GetService Api.Containers.UnityResolver]-获取服务实体IHostBufferPolicySelector失败当前类型System.Web.Http.Hosting.IHostBufferPolicySelector是一个接口,无法构造。是否缺少类型映射
在执行以下操作时发生异常: •解析时:IHostBufferPolicySelector 2020-07-24 08:07:07201[43]错误Api.Containers.UnityResolver[GetService Api.Containers.UnityResolver]-获取服务实体IContentNegotiator失败当前类型System.Net.Http.Formatting.IContentNegotiator是一个接口,无法构造。是否缺少类型映射
在执行以下操作时发生异常: •解析时:IContentNegotiator 2020-07-24 08:07:07403[41]错误Api.Containers.UnityResolver[GetService Api.Containers.UnityResolver]-获取服务实体IEExceptionHandler失败当前类型System.Web.Http.ExceptionHandling.IEExceptionHandler是一个接口,无法构造。是否缺少类型映射
在执行以下操作时发生异常:
•解析时:IEExceptionHandler您可以共享异常消息吗?我几天前添加了两条异常消息。您可以共享异常消息吗?我几天前添加了两条异常消息
[RoutePrefix("api/testing")]
public class TestController : ApiController
{
private readonly IDatabaseConfigService _dbConfigService;
private static readonly ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
/// <summary>
/// Test controller
/// </summary>
public TestController(IDatabaseConfigService dbConfigService)
{
_dbConfigService = dbConfigService;
}
}