错误 - System.MissingMemberException:延迟初始化类型没有公共、无参数构造函数
错误是不言自明的。该类型没有公共的无参数构造函数。
但是如何在 ASP.NET Core MVC 中进行依赖注入以解析为我想要的实际构造函数。 惰性类型有一个构造函数和其他依赖项,这些依赖项在startup.cs中注册。这就是我想要的构造函数。
我尝试添加默认构造函数。但我需要使用带有依赖项的构造函数。
应用程序是一个 ASP.NET Core MVC 应用程序。我没有使用 Unity 或任何其他 DI 框架,而是使用 ASP.NET MVC Core 附带的框架。
我在其他帖子中读到,像 Unity 这样的框架会自动解决这个问题。 我想知道如何在 ASP.NET Core MVC 中解决这个问题。
我有一个控制器,它依赖于延迟初始化的类型。 示例控制器.cs
public class SampleController
{
private readonly Lazy<LazyTypeA> _LazyTypeA;
public SampleController(LazyTypeA lazyTypeA)
{
_LazyTypeA = lazyTypeA;
}
public Action TestAction()
{
_LazyTypeA.SomeMethod() <-- Errors at this line
}
}
LazyTypeA.cs
public class LazyTypeA
{
private readonly DependentClass _dependentClass ;
public LazyTypeA(DependentClass dependentClass )
{
_dependentClass = dependentClass ;
}
}
启动.cs
services.AddTransient<DependentClass>();
services.AddTransient<Lazy<LazyTypeA>>();
您需要在 DI 中注册
LazyTypeA
。然后我建议使用工厂注册:
services.AddTransient<LazyTypeA>();
services.AddTransient<Lazy<LazyTypeA>>(sp => new Lazy<LazyTypeA>(() => sp.GetRequiredService<LazyTypeA>()));