我的项目中有很多服务,并尝试使用Scrutor进行自动 DI,而不是在 startup.cs 上手动注册每个服务
酒吧服务.cs
public class BarService : IBar
{
public Bar Get(int id)
{
var bar = new Bar
{
bar_date = DateTime.UtcNow,
bar_name = "bar"
};
return bar;
}
public List<Bar> GetMany()
{
List<Bar> list = new List<Bar>
{
new Bar
{
bar_date = DateTime.UtcNow,
bar_name = "bar 1"
},
new Bar
{
bar_date = DateTime.UtcNow,
bar_name = "bar 2"
}
};
return list;
}
}
IBar.cs
public interface IBar
{
Bar Get(int id);
List<Bar> GetMany();
}
酒吧.cs
public class Bar
{
public string bar_name { get; set; }
public DateTime bar_date { get; set; }
}
酒吧控制器.cs
[Route("api/[controller]")]
[ApiController]
public class BarController : ControllerBase
{
public IBar _service { get; set; }
public BarController(IBar service)
{
_service = service;
}
[HttpGet("{id:int}")]
public IActionResult Get(int id)
{
var result = _service.Get(id);
if (result != null)
{
return Ok(result);
}
return NotFound("No data found");
}
[HttpGet]
public IActionResult GetMany()
{
var result = _service.GetMany();
if (result != null)
{
return Ok(result);
}
return NotFound("No data found");
}
}
添加services.AddScoped<IBar, BarService>();到 Startup.cs 可以正常工作,但不能使用 Scrutor 来自动映射。
services.Scan(scan =>
scan.FromCallingAssembly()
.AddClasses()
.AsMatchingInterface());
我收到错误

