尝试使用Lamar调用以下控制器以在运行时解析依赖项时出现错误。
我尝试了.AddControllersAsServices()
,但没有尝试,仍然得到相同的结果。
使用
- ASP.NET Core:3.1
- 拉马尔
Container.GetInstance<IDataaccess>()
在监视窗口内工作,但在运行时无法解析
Container.WhatDoIHave()
还表明存在依赖关系
问题?
我在Lamar配置中缺少什么来解析控制器?
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private readonly IDataaccess _dataaccess;
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(IDataaccess dataaccess,ILogger<WeatherForecastController> logger)
{
_dataaccess = dataaccess;
}
[HttpGet]
public IEnumerable<string> Get()
{
return _dataaccess.Getall();
}
}
Startup.cs
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public IContainer Container { get; private set; }
public void ConfigureContainer(ServiceRegistry services)
{
Container = new Container(cfg =>
{
cfg.Scan(scanner =>
{
scanner.AssembliesAndExecutablesFromApplicationBaseDirectory(a =>
a.FullName.Contains("Test3.1"));
scanner.WithDefaultConventions();
scanner.SingleImplementationsOfInterface();
});
});
services
.AddControllers(options =>
{
// Disable automatic fallback to JSON
options.ReturnHttpNotacceptable = true;
// Honor browser's accept header (e.g. Chrome)
options.RespectBrowseracceptheader = true;
})
.AddControllersAsServices();
services.AddMvc()
.AddControllersAsServices();
Container.WhatDidIScan();
Container.WhatDoIHave();
Console.Write("Container Instantiated");
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app,IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseDefaultFiles();
app.UseStaticfiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
Program.cs
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseLamar()
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder
.UseContentRoot(Directory.getcurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>();
});
}
处理请求时发生未处理的异常。
LamarException:无法构建'Test3._1.Controllers.WeatherForecastController'的注册实例weatherForecastController: 无法填充任何公共构造函数的依赖项 可用的构造函数:新的WeatherForecastController(IDataaccess dataaccess,
ILogger<Test3._1.Controllers.WeatherForecastController>
记录器) * IDataaccess未在此容器中注册,并且任何丢失的家庭政策都无法自动发现