Внутренняя ошибка сервера в dot net mvc: не удалось разрешить службу - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь использовать 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; }
    }

и модель для TicketsList:

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, проблема как-то связана с тем фактом, что я не использовал объектную структуру?(Для простоты я не выложил код для моего просмотра, но я могу сделать это при необходимости)

1 Ответ

0 голосов
/ 23 мая 2018

проблема наступает из-за внедрения зависимости.Здесь Как приложение узнает, что Список рейсов объект требует в Home Controller.Чтобы это исправить, вы должны настроить его в классе StartUp.Cs. Настроить метод службы.

 services.AddSingelton<FlightsList>();

Существуют различные способы его настройки, такие как Transient , AddScoped и т. Д..

Лучше, если вы воспользуетесь здесь шаблоном хранилища.Зарегистрируйтесь здесь Интерфейс.вроде следующего.

 services.AddSingelton<IRepository, FlightsList>();

На стороне контроллера.

public class HomeController : Controller
{
    private IRepository l;

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

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...