错误=>
处理请求时发生未处理的异常。InvalidOperationException:在尝试激活"BookReadingEventWebApplication.Controllers.HomeController"时,无法解析类型为"Business_Logic_Layer.Home.HomeBLL"的服务。Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp,Type Type,Type requiredBy,bool isDefaultParameterRequired(
启动.cs=>
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
services.AddAutoMapper(typeof(Startup));
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<IdentityUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddScoped<IAccountRepository, AccountRepository>();
services.AddControllersWithViews();
}
[1]: https://i.stack.imgur.com/39YUb.png
**HomeController** =>
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public readonly IHomeBLL _BLL;
public HomeController( ILogger<HomeController> logger, IHomeBLL BLL)
{
_logger = logger;
_BLL = BLL;
}
public IActionResult Index()
{
var list = _BLL.GetAllEvents();
return View(list);
}
**HomeBLL** =>
public class HomeBLL : IHomeBLL
{
private Data_Access_Layer.HomeDAL _DAL;
public HomeBLL(Data_Access_Layer.HomeDAL DAL)
{
_DAL = DAL;
}
public List<BookReadingEventModel> GetAllEvents()
{
return _DAL.GetAllEvents();
}
}
**IHomeBLL** =>
public interface IHomeBLL
{
public List<BookReadingEventModel> GetAllEvents();
}
您需要在ConfigureServices
中注册IHomeBLL
服务。
例如:
// or AddSingleton or AddTransient
services.AddScoped<IHomeBLL, HomeBLL>();
但是,由于HomeBLL
依赖于(Data_Access_Layer.HomeDAL DAL)
,因此您需要遵循此链。
注册HomeDAL
您没有显示需要创建什么HomeDAL
,以下只是猜测
这里有一些选项,其中一个可能适用于您的设置。
如果HomeDAL
需要"手动"创建:
// Create
HomeDAL homeDAL = ...;
services.AddScoped<IHomeBLL>(provider => new HomeBLL(homeDAL));
请注意,如果HomeDAL
实现接口IHomeDAL
,而HomeBLL
依赖于IHomeDAL
,可能会更好。然后,如果HomeDAL
没有任何依赖项,您可以通过以下方式注册它们:
// or AddSingleton or AddTransient
services.AddScoped<IHomeDAL, HomeDAL>();
services.AddScoped<IHomeBLL, HomeBLL>();