4

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

当我尝试解决界面时,我收到了他的以下消息。

内部异常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();
    }
}

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

[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();
    }
}
4

2 回答 2

4

异常原因:

InvalidOperationException: No public constructor is available for type [ProjectName].ITest

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

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

services.AddTransient<ITest, Test>();
于 2020-12-20T04:23:39.683 回答
0

也没有调用构造函数。那里应该有一个 [new] Test.Foo() 。或者使 Foo() 静态。

于 2020-12-20T04:33:11.400 回答