dot net mvc中的内部服务器错误:无法解析服务

时间:2018-05-23 07:21:56

标签: asp.net-mvc database entity-framework service

我正在尝试使用带控制器的MVC来查看模型和数据库。 但我的前提是我不知道如何在我的案例中使用实体框架来连接模型和数据库。所以我得到这个运行时错误: " InvalidOperationException:无法解析类型' WebCoreFly.Models.FlightsList '的服务试图激活' WebCoreFly.Controllers.HomeController"

我的代码包括: 控制器代码:

public class HomeController : Controller
    {
        private FlightsList l;

        public HomeController(FlightsList theList)
        { l = theList; }

        public ViewResult Index()
        {
            return View(l.Flights);
        }
    }

航班的标准代码:

public partial class Flights
    {
        public long ID { get; set; }
        public long Id_Destination { get; set; }
        public string Id_Source { get; set; }
        public string Nome { get; set; }
        public string Company { get; set; }
        public System.DateTime Time { get; set; }
        public string Id_Plane { get; set; }
        public Nullable<System.DateTime> TimeOfArrival { get; set; }
    }

和FlightsList的模型:

public class FlightsList
    {
        private FlyDBContext context;

        public FlightsList(FlyDBContext ctx)
        {
            context = ctx;
        }

        public IQueryable<Flights> Flights => context.Flights;
    }

最后我定义了我的dbcontext:

public class FlyDBContext : DbContext
    {
        public FlyDBContext(DbContextOptions<FlyDBContext> options)
            : base(options)
        {
        }

        public DbSet<WebCoreFly.Models.Passengers> Passengers { get; set; }
        public DbSet<WebCoreFly.Models.Bookings> Bookings { get; set; }
        public DbSet<WebCoreFly.Models.Flights> Flights { get; set; }
    }

在我的启动代码中,我将服务配置为接受我的dbcontext,其中包含指向现有SQL数据库的链接,名为Fly:

public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.AddDbContext<FlyDBContext>(options =>
                    options.UseSqlServer(@"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Fly;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"));
        }

这是启动的配置方法:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseBrowserLink();
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseStaticFiles();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }

我的问题是:谁负责将航班列表传递给我的控制器?由于航班列表与dbcontext绑定,问题是否与我没有使用entityframework的事实有某种关系? (为了简洁,Idid不会发布我的视图的代码,但如果有必要我可以这样做)

1 个答案:

答案 0 :(得分:1)

由于依赖注入问题而出现问题。这里应用程序如何知道 Flights List 对象在Home Controller中需要。要解决此问题,您必须在StartUp.Cs类配置服务方法中配置它。

primaryContentAlpha

有多种方法可以配置它,例如瞬态 AddScoped 等。

如果您在此处使用存储库模式,那就更好了。在这里注册接口。喜欢以下。

 services.AddSingelton<FlightsList>();

在控制器方面。

 services.AddSingelton<IRepository, FlightsList>();

希望它会有所帮助。