Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity容器解析失败异常ASP.NET Web API 2_C#_Asp.net_.net_Asp.net Mvc_Unity Container - Fatal编程技术网

C# Unity容器解析失败异常ASP.NET Web API 2

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

我有一个使用Unity 5.11的ASP.Net应用程序,它是以标准方式设置的

使用UnityResolver实现IDependencyResolver,尽管我在GetService上遇到了很多异常

我目前正在忽略某些我没有注入的接口,正如您将在代码中看到的那样。我对下面的方法不是特别满意,有没有办法阻止Unity/ASP.net请求从Unity注入这些接口

值得注意的是,我所有的依赖项都被注入到了非常好的状态,我只是想知道是否有一种方法可以阻止抛出这些异常,因为我希望它会对性能造成某种损害

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;
    }
}