为什么我在启动应用程序时遇到相同的错误? "InvalidOperationException: Unable to resolve service"



错误=>

处理请求时发生未处理的异常。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>();

最新更新