没有可用的公共构造函数 Unity.Exceptions.InvalidRegistrationException

Ash*_*our 3 c# asp.net-mvc unity-container unity-interception

我继承了这个项目,我通常不统一作为我的依赖解析器,所以请原谅我,如果这是一个愚蠢的问题。

当我尝试解决接口时,我收到以下消息。

内部异常1:

InvalidOperationException:没有可用于类型 [ProjectName].ITest 的公共构造函数

内部异常2:

InvalidRegistrationException:引发了“Unity.Exceptions.InvalidRegistrationException”类型的异常。

现在,在有人跳到我身上并说我没有构造函数之前,该类看起来像这样......它有一个没有参数的构造函数。

namespace ProjectName
{
    public class Test : ITest
    {
        public Test()
        {
        }

        public int Foo() => 99;
    }

    public interface ITest
    {
        int Foo();
    }
}
Run Code Online (Sandbox Code Playgroud)

所以有一个没有参数的构造函数 这是试图解析该类的类。

[Route("api/Test")]
public class TestController : ApiController
{

    [Dependency]
    public ITest Test { get; set; }


    public TestController()
    {

    }

    [HttpPost]
    public IHttpActionResult Post()
    {
        var i = Test.Foo();
        return Ok();
    }
}
Run Code Online (Sandbox Code Playgroud)

Leo*_*Leo 7

异常原因:

InvalidOperationException: No public constructor is available for type [ProjectName].ITest
Run Code Online (Sandbox Code Playgroud)

是因为 DI 试图创建接口的实例ITest而不是Test.

当请求 ITest 时,您必须注册依赖项以解析为 Test,例如:

services.AddTransient<ITest, Test>();
Run Code Online (Sandbox Code Playgroud)