首页 \ 问答 \ 错误TS2305:模块没有导出成员(error TS2305: Module has no exported member)

错误TS2305:模块没有导出成员(error TS2305: Module has no exported member)

我正在做一个打字稿文件中的两个导入:

import { DOCUMENT } from '@angular/platform-browser';
import { Positioning } from '@ng-bootstrap/ng-bootstrap';

第一个语句有效,但是编译器抱怨第二个语句(ng-bootstrap import):

src/app/extensions/angular-calendar/directives/calendarTooltip.directive.ts(19,10): error TS2305: Module '"/Users/gg/OneDrive/Studies/Node/timely-frontend/node_modules/@ng-bootstrap/ng-bootstrap/index"' has no exported member 'Positioning'.

我已经知道我安装了ng-bootstrap。 我不确定这可能是什么原因造成的。

以下是我的tsconfig.json文件:

{
  "compilerOptions": {
    "outDir": "build/app",
    "target": "es5",
    "module": "system",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false
  },
  "exclude": [
    "gulpfile.ts",
    "node_modules"
  ]
}

我安装的ng-bootstrap:

gg:timely-frontend gaurav$ tree node_modules/@ng-bootstrap/ng-bootstrap
node_modules/@ng-bootstrap/ng-bootstrap
├── README.md
├── accordion
│   ├── accordion-config.d.ts
│   ├── accordion-config.js
│   ├── accordion-config.js.map
│   ├── accordion-config.metadata.json
│   ├── accordion.d.ts
│   ├── accordion.js
│   ├── accordion.js.map
│   ├── accordion.metadata.json
│   ├── accordion.module.d.ts
│   ├── accordion.module.js
│   ├── accordion.module.js.map
│   └── accordion.module.metadata.json
├── alert
│   ├── alert-config.d.ts
│   ├── alert-config.js
│   ├── alert-config.js.map
│   ├── alert-config.metadata.json
│   ├── alert.d.ts
│   ├── alert.js
│   ├── alert.js.map
│   ├── alert.metadata.json
│   ├── alert.module.d.ts
│   ├── alert.module.js
│   ├── alert.module.js.map
│   └── alert.module.metadata.json
├── bundles
│   ├── ng-bootstrap.js
│   └── ng-bootstrap.js.map
├── buttons
│   ├── radio.d.ts
│   ├── radio.js
│   ├── radio.js.map
│   ├── radio.metadata.json
│   ├── radio.module.d.ts
│   ├── radio.module.js
│   ├── radio.module.js.map
│   └── radio.module.metadata.json
├── carousel
│   ├── carousel-config.d.ts
│   ├── carousel-config.js
│   ├── carousel-config.js.map
│   ├── carousel-config.metadata.json
│   ├── carousel.d.ts
│   ├── carousel.js
│   ├── carousel.js.map
│   ├── carousel.metadata.json
│   ├── carousel.module.d.ts
│   ├── carousel.module.js
│   ├── carousel.module.js.map
│   └── carousel.module.metadata.json
├── collapse
│   ├── collapse.d.ts
│   ├── collapse.js
│   ├── collapse.js.map
│   ├── collapse.metadata.json
│   ├── collapse.module.d.ts
│   ├── collapse.module.js
│   ├── collapse.module.js.map
│   └── collapse.module.metadata.json
├── datepicker
│   ├── datepicker-config.d.ts
│   ├── datepicker-config.js
│   ├── datepicker-config.js.map
│   ├── datepicker-config.metadata.json
│   ├── datepicker-day-template-context.d.ts
│   ├── datepicker-day-template-context.js
│   ├── datepicker-day-template-context.js.map
│   ├── datepicker-day-view.d.ts
│   ├── datepicker-day-view.js
│   ├── datepicker-day-view.js.map
│   ├── datepicker-day-view.metadata.json
│   ├── datepicker-i18n.d.ts
│   ├── datepicker-i18n.js
│   ├── datepicker-i18n.js.map
│   ├── datepicker-i18n.metadata.json
│   ├── datepicker-input.d.ts
│   ├── datepicker-input.js
│   ├── datepicker-input.js.map
│   ├── datepicker-input.metadata.json
│   ├── datepicker-month-view.d.ts
│   ├── datepicker-month-view.js
│   ├── datepicker-month-view.js.map
│   ├── datepicker-month-view.metadata.json
│   ├── datepicker-navigation-select.d.ts
│   ├── datepicker-navigation-select.js
│   ├── datepicker-navigation-select.js.map
│   ├── datepicker-navigation-select.metadata.json
│   ├── datepicker-navigation.d.ts
│   ├── datepicker-navigation.js
│   ├── datepicker-navigation.js.map
│   ├── datepicker-navigation.metadata.json
│   ├── datepicker-service.d.ts
│   ├── datepicker-service.js
│   ├── datepicker-service.js.map
│   ├── datepicker-service.metadata.json
│   ├── datepicker-view-model.d.ts
│   ├── datepicker-view-model.js
│   ├── datepicker-view-model.js.map
│   ├── datepicker-view-model.metadata.json
│   ├── datepicker.d.ts
│   ├── datepicker.js
│   ├── datepicker.js.map
│   ├── datepicker.metadata.json
│   ├── datepicker.module.d.ts
│   ├── datepicker.module.js
│   ├── datepicker.module.js.map
│   ├── datepicker.module.metadata.json
│   ├── ngb-calendar.d.ts
│   ├── ngb-calendar.js
│   ├── ngb-calendar.js.map
│   ├── ngb-calendar.metadata.json
│   ├── ngb-date-parser-formatter.d.ts
│   ├── ngb-date-parser-formatter.js
│   ├── ngb-date-parser-formatter.js.map
│   ├── ngb-date-struct.d.ts
│   ├── ngb-date-struct.js
│   ├── ngb-date-struct.js.map
│   ├── ngb-date.d.ts
│   ├── ngb-date.js
│   └── ngb-date.js.map
├── dropdown
│   ├── dropdown-config.d.ts
│   ├── dropdown-config.js
│   ├── dropdown-config.js.map
│   ├── dropdown-config.metadata.json
│   ├── dropdown.d.ts
│   ├── dropdown.js
│   ├── dropdown.js.map
│   ├── dropdown.metadata.json
│   ├── dropdown.module.d.ts
│   ├── dropdown.module.js
│   ├── dropdown.module.js.map
│   └── dropdown.module.metadata.json
├── index.d.ts
├── index.js
├── index.js.map
├── index.metadata.json
├── modal
│   ├── modal-backdrop.d.ts
│   ├── modal-backdrop.js
│   ├── modal-backdrop.js.map
│   ├── modal-backdrop.metadata.json
│   ├── modal-container.d.ts
│   ├── modal-container.js
│   ├── modal-container.js.map
│   ├── modal-container.metadata.json
│   ├── modal-dismiss-reasons.d.ts
│   ├── modal-dismiss-reasons.js
│   ├── modal-dismiss-reasons.js.map
│   ├── modal-dismiss-reasons.metadata.json
│   ├── modal-ref.d.ts
│   ├── modal-ref.js
│   ├── modal-ref.js.map
│   ├── modal-ref.metadata.json
│   ├── modal-stack.d.ts
│   ├── modal-stack.js
│   ├── modal-stack.js.map
│   ├── modal-stack.metadata.json
│   ├── modal-window.d.ts
│   ├── modal-window.js
│   ├── modal-window.js.map
│   ├── modal-window.metadata.json
│   ├── modal.d.ts
│   ├── modal.js
│   ├── modal.js.map
│   ├── modal.metadata.json
│   ├── modal.module.d.ts
│   ├── modal.module.js
│   ├── modal.module.js.map
│   └── modal.module.metadata.json
├── package.json
├── pagination
│   ├── pagination-config.d.ts
│   ├── pagination-config.js
│   ├── pagination-config.js.map
│   ├── pagination-config.metadata.json
│   ├── pagination.d.ts
│   ├── pagination.js
│   ├── pagination.js.map
│   ├── pagination.metadata.json
│   ├── pagination.module.d.ts
│   ├── pagination.module.js
│   ├── pagination.module.js.map
│   └── pagination.module.metadata.json
├── popover
│   ├── popover-config.d.ts
│   ├── popover-config.js
│   ├── popover-config.js.map
│   ├── popover-config.metadata.json
│   ├── popover.d.ts
│   ├── popover.js
│   ├── popover.js.map
│   ├── popover.metadata.json
│   ├── popover.module.d.ts
│   ├── popover.module.js
│   ├── popover.module.js.map
│   └── popover.module.metadata.json
├── progressbar
│   ├── progressbar-config.d.ts
│   ├── progressbar-config.js
│   ├── progressbar-config.js.map
│   ├── progressbar-config.metadata.json
│   ├── progressbar.d.ts
│   ├── progressbar.js
│   ├── progressbar.js.map
│   ├── progressbar.metadata.json
│   ├── progressbar.module.d.ts
│   ├── progressbar.module.js
│   ├── progressbar.module.js.map
│   └── progressbar.module.metadata.json
├── rating
│   ├── rating-config.d.ts
│   ├── rating-config.js
│   ├── rating-config.js.map
│   ├── rating-config.metadata.json
│   ├── rating.d.ts
│   ├── rating.js
│   ├── rating.js.map
│   ├── rating.metadata.json
│   ├── rating.module.d.ts
│   ├── rating.module.js
│   ├── rating.module.js.map
│   └── rating.module.metadata.json
├── tabset
│   ├── tabset-config.d.ts
│   ├── tabset-config.js
│   ├── tabset-config.js.map
│   ├── tabset-config.metadata.json
│   ├── tabset.d.ts
│   ├── tabset.js
│   ├── tabset.js.map
│   ├── tabset.metadata.json
│   ├── tabset.module.d.ts
│   ├── tabset.module.js
│   ├── tabset.module.js.map
│   └── tabset.module.metadata.json
├── timepicker
│   ├── ngb-time-struct.d.ts
│   ├── ngb-time-struct.js
│   ├── ngb-time-struct.js.map
│   ├── ngb-time.d.ts
│   ├── ngb-time.js
│   ├── ngb-time.js.map
│   ├── timepicker-config.d.ts
│   ├── timepicker-config.js
│   ├── timepicker-config.js.map
│   ├── timepicker-config.metadata.json
│   ├── timepicker.d.ts
│   ├── timepicker.js
│   ├── timepicker.js.map
│   ├── timepicker.metadata.json
│   ├── timepicker.module.d.ts
│   ├── timepicker.module.js
│   ├── timepicker.module.js.map
│   └── timepicker.module.metadata.json
├── tooltip
│   ├── tooltip-config.d.ts
│   ├── tooltip-config.js
│   ├── tooltip-config.js.map
│   ├── tooltip-config.metadata.json
│   ├── tooltip.d.ts
│   ├── tooltip.js
│   ├── tooltip.js.map
│   ├── tooltip.metadata.json
│   ├── tooltip.module.d.ts
│   ├── tooltip.module.js
│   ├── tooltip.module.js.map
│   └── tooltip.module.metadata.json
├── typeahead
│   ├── highlight.d.ts
│   ├── highlight.js
│   ├── highlight.js.map
│   ├── highlight.metadata.json
│   ├── typeahead-config.d.ts
│   ├── typeahead-config.js
│   ├── typeahead-config.js.map
│   ├── typeahead-config.metadata.json
│   ├── typeahead-window.d.ts
│   ├── typeahead-window.js
│   ├── typeahead-window.js.map
│   ├── typeahead-window.metadata.json
│   ├── typeahead.d.ts
│   ├── typeahead.js
│   ├── typeahead.js.map
│   ├── typeahead.metadata.json
│   ├── typeahead.module.d.ts
│   ├── typeahead.module.js
│   ├── typeahead.module.js.map
│   └── typeahead.module.metadata.json
└── util
    ├── popup.d.ts
    ├── popup.js
    ├── popup.js.map
    ├── positioning.d.ts
    ├── positioning.js
    ├── positioning.js.map
    ├── triggers.d.ts
    ├── triggers.js
    ├── triggers.js.map
    ├── util.d.ts
    ├── util.js
    ├── util.js.map
    └── util.metadata.json

18 directories, 287 files

I am doing following two imports in a typescript file:

import { DOCUMENT } from '@angular/platform-browser';
import { Positioning } from '@ng-bootstrap/ng-bootstrap';

First statement works however compiler complains about the second statement (ng-bootstrap import):

src/app/extensions/angular-calendar/directives/calendarTooltip.directive.ts(19,10): error TS2305: Module '"/Users/gg/OneDrive/Studies/Node/timely-frontend/node_modules/@ng-bootstrap/ng-bootstrap/index"' has no exported member 'Positioning'.

I have checeked that I have ng-bootstrap installed. I am not sure what could be possible cause for this.

Following is my tsconfig.json file:

{
  "compilerOptions": {
    "outDir": "build/app",
    "target": "es5",
    "module": "system",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false
  },
  "exclude": [
    "gulpfile.ts",
    "node_modules"
  ]
}

My installed ng-bootstrap:

gg:timely-frontend gaurav$ tree node_modules/@ng-bootstrap/ng-bootstrap
node_modules/@ng-bootstrap/ng-bootstrap
├── README.md
├── accordion
│   ├── accordion-config.d.ts
│   ├── accordion-config.js
│   ├── accordion-config.js.map
│   ├── accordion-config.metadata.json
│   ├── accordion.d.ts
│   ├── accordion.js
│   ├── accordion.js.map
│   ├── accordion.metadata.json
│   ├── accordion.module.d.ts
│   ├── accordion.module.js
│   ├── accordion.module.js.map
│   └── accordion.module.metadata.json
├── alert
│   ├── alert-config.d.ts
│   ├── alert-config.js
│   ├── alert-config.js.map
│   ├── alert-config.metadata.json
│   ├── alert.d.ts
│   ├── alert.js
│   ├── alert.js.map
│   ├── alert.metadata.json
│   ├── alert.module.d.ts
│   ├── alert.module.js
│   ├── alert.module.js.map
│   └── alert.module.metadata.json
├── bundles
│   ├── ng-bootstrap.js
│   └── ng-bootstrap.js.map
├── buttons
│   ├── radio.d.ts
│   ├── radio.js
│   ├── radio.js.map
│   ├── radio.metadata.json
│   ├── radio.module.d.ts
│   ├── radio.module.js
│   ├── radio.module.js.map
│   └── radio.module.metadata.json
├── carousel
│   ├── carousel-config.d.ts
│   ├── carousel-config.js
│   ├── carousel-config.js.map
│   ├── carousel-config.metadata.json
│   ├── carousel.d.ts
│   ├── carousel.js
│   ├── carousel.js.map
│   ├── carousel.metadata.json
│   ├── carousel.module.d.ts
│   ├── carousel.module.js
│   ├── carousel.module.js.map
│   └── carousel.module.metadata.json
├── collapse
│   ├── collapse.d.ts
│   ├── collapse.js
│   ├── collapse.js.map
│   ├── collapse.metadata.json
│   ├── collapse.module.d.ts
│   ├── collapse.module.js
│   ├── collapse.module.js.map
│   └── collapse.module.metadata.json
├── datepicker
│   ├── datepicker-config.d.ts
│   ├── datepicker-config.js
│   ├── datepicker-config.js.map
│   ├── datepicker-config.metadata.json
│   ├── datepicker-day-template-context.d.ts
│   ├── datepicker-day-template-context.js
│   ├── datepicker-day-template-context.js.map
│   ├── datepicker-day-view.d.ts
│   ├── datepicker-day-view.js
│   ├── datepicker-day-view.js.map
│   ├── datepicker-day-view.metadata.json
│   ├── datepicker-i18n.d.ts
│   ├── datepicker-i18n.js
│   ├── datepicker-i18n.js.map
│   ├── datepicker-i18n.metadata.json
│   ├── datepicker-input.d.ts
│   ├── datepicker-input.js
│   ├── datepicker-input.js.map
│   ├── datepicker-input.metadata.json
│   ├── datepicker-month-view.d.ts
│   ├── datepicker-month-view.js
│   ├── datepicker-month-view.js.map
│   ├── datepicker-month-view.metadata.json
│   ├── datepicker-navigation-select.d.ts
│   ├── datepicker-navigation-select.js
│   ├── datepicker-navigation-select.js.map
│   ├── datepicker-navigation-select.metadata.json
│   ├── datepicker-navigation.d.ts
│   ├── datepicker-navigation.js
│   ├── datepicker-navigation.js.map
│   ├── datepicker-navigation.metadata.json
│   ├── datepicker-service.d.ts
│   ├── datepicker-service.js
│   ├── datepicker-service.js.map
│   ├── datepicker-service.metadata.json
│   ├── datepicker-view-model.d.ts
│   ├── datepicker-view-model.js
│   ├── datepicker-view-model.js.map
│   ├── datepicker-view-model.metadata.json
│   ├── datepicker.d.ts
│   ├── datepicker.js
│   ├── datepicker.js.map
│   ├── datepicker.metadata.json
│   ├── datepicker.module.d.ts
│   ├── datepicker.module.js
│   ├── datepicker.module.js.map
│   ├── datepicker.module.metadata.json
│   ├── ngb-calendar.d.ts
│   ├── ngb-calendar.js
│   ├── ngb-calendar.js.map
│   ├── ngb-calendar.metadata.json
│   ├── ngb-date-parser-formatter.d.ts
│   ├── ngb-date-parser-formatter.js
│   ├── ngb-date-parser-formatter.js.map
│   ├── ngb-date-struct.d.ts
│   ├── ngb-date-struct.js
│   ├── ngb-date-struct.js.map
│   ├── ngb-date.d.ts
│   ├── ngb-date.js
│   └── ngb-date.js.map
├── dropdown
│   ├── dropdown-config.d.ts
│   ├── dropdown-config.js
│   ├── dropdown-config.js.map
│   ├── dropdown-config.metadata.json
│   ├── dropdown.d.ts
│   ├── dropdown.js
│   ├── dropdown.js.map
│   ├── dropdown.metadata.json
│   ├── dropdown.module.d.ts
│   ├── dropdown.module.js
│   ├── dropdown.module.js.map
│   └── dropdown.module.metadata.json
├── index.d.ts
├── index.js
├── index.js.map
├── index.metadata.json
├── modal
│   ├── modal-backdrop.d.ts
│   ├── modal-backdrop.js
│   ├── modal-backdrop.js.map
│   ├── modal-backdrop.metadata.json
│   ├── modal-container.d.ts
│   ├── modal-container.js
│   ├── modal-container.js.map
│   ├── modal-container.metadata.json
│   ├── modal-dismiss-reasons.d.ts
│   ├── modal-dismiss-reasons.js
│   ├── modal-dismiss-reasons.js.map
│   ├── modal-dismiss-reasons.metadata.json
│   ├── modal-ref.d.ts
│   ├── modal-ref.js
│   ├── modal-ref.js.map
│   ├── modal-ref.metadata.json
│   ├── modal-stack.d.ts
│   ├── modal-stack.js
│   ├── modal-stack.js.map
│   ├── modal-stack.metadata.json
│   ├── modal-window.d.ts
│   ├── modal-window.js
│   ├── modal-window.js.map
│   ├── modal-window.metadata.json
│   ├── modal.d.ts
│   ├── modal.js
│   ├── modal.js.map
│   ├── modal.metadata.json
│   ├── modal.module.d.ts
│   ├── modal.module.js
│   ├── modal.module.js.map
│   └── modal.module.metadata.json
├── package.json
├── pagination
│   ├── pagination-config.d.ts
│   ├── pagination-config.js
│   ├── pagination-config.js.map
│   ├── pagination-config.metadata.json
│   ├── pagination.d.ts
│   ├── pagination.js
│   ├── pagination.js.map
│   ├── pagination.metadata.json
│   ├── pagination.module.d.ts
│   ├── pagination.module.js
│   ├── pagination.module.js.map
│   └── pagination.module.metadata.json
├── popover
│   ├── popover-config.d.ts
│   ├── popover-config.js
│   ├── popover-config.js.map
│   ├── popover-config.metadata.json
│   ├── popover.d.ts
│   ├── popover.js
│   ├── popover.js.map
│   ├── popover.metadata.json
│   ├── popover.module.d.ts
│   ├── popover.module.js
│   ├── popover.module.js.map
│   └── popover.module.metadata.json
├── progressbar
│   ├── progressbar-config.d.ts
│   ├── progressbar-config.js
│   ├── progressbar-config.js.map
│   ├── progressbar-config.metadata.json
│   ├── progressbar.d.ts
│   ├── progressbar.js
│   ├── progressbar.js.map
│   ├── progressbar.metadata.json
│   ├── progressbar.module.d.ts
│   ├── progressbar.module.js
│   ├── progressbar.module.js.map
│   └── progressbar.module.metadata.json
├── rating
│   ├── rating-config.d.ts
│   ├── rating-config.js
│   ├── rating-config.js.map
│   ├── rating-config.metadata.json
│   ├── rating.d.ts
│   ├── rating.js
│   ├── rating.js.map
│   ├── rating.metadata.json
│   ├── rating.module.d.ts
│   ├── rating.module.js
│   ├── rating.module.js.map
│   └── rating.module.metadata.json
├── tabset
│   ├── tabset-config.d.ts
│   ├── tabset-config.js
│   ├── tabset-config.js.map
│   ├── tabset-config.metadata.json
│   ├── tabset.d.ts
│   ├── tabset.js
│   ├── tabset.js.map
│   ├── tabset.metadata.json
│   ├── tabset.module.d.ts
│   ├── tabset.module.js
│   ├── tabset.module.js.map
│   └── tabset.module.metadata.json
├── timepicker
│   ├── ngb-time-struct.d.ts
│   ├── ngb-time-struct.js
│   ├── ngb-time-struct.js.map
│   ├── ngb-time.d.ts
│   ├── ngb-time.js
│   ├── ngb-time.js.map
│   ├── timepicker-config.d.ts
│   ├── timepicker-config.js
│   ├── timepicker-config.js.map
│   ├── timepicker-config.metadata.json
│   ├── timepicker.d.ts
│   ├── timepicker.js
│   ├── timepicker.js.map
│   ├── timepicker.metadata.json
│   ├── timepicker.module.d.ts
│   ├── timepicker.module.js
│   ├── timepicker.module.js.map
│   └── timepicker.module.metadata.json
├── tooltip
│   ├── tooltip-config.d.ts
│   ├── tooltip-config.js
│   ├── tooltip-config.js.map
│   ├── tooltip-config.metadata.json
│   ├── tooltip.d.ts
│   ├── tooltip.js
│   ├── tooltip.js.map
│   ├── tooltip.metadata.json
│   ├── tooltip.module.d.ts
│   ├── tooltip.module.js
│   ├── tooltip.module.js.map
│   └── tooltip.module.metadata.json
├── typeahead
│   ├── highlight.d.ts
│   ├── highlight.js
│   ├── highlight.js.map
│   ├── highlight.metadata.json
│   ├── typeahead-config.d.ts
│   ├── typeahead-config.js
│   ├── typeahead-config.js.map
│   ├── typeahead-config.metadata.json
│   ├── typeahead-window.d.ts
│   ├── typeahead-window.js
│   ├── typeahead-window.js.map
│   ├── typeahead-window.metadata.json
│   ├── typeahead.d.ts
│   ├── typeahead.js
│   ├── typeahead.js.map
│   ├── typeahead.metadata.json
│   ├── typeahead.module.d.ts
│   ├── typeahead.module.js
│   ├── typeahead.module.js.map
│   └── typeahead.module.metadata.json
└── util
    ├── popup.d.ts
    ├── popup.js
    ├── popup.js.map
    ├── positioning.d.ts
    ├── positioning.js
    ├── positioning.js.map
    ├── triggers.d.ts
    ├── triggers.js
    ├── triggers.js.map
    ├── util.d.ts
    ├── util.js
    ├── util.js.map
    └── util.metadata.json

18 directories, 287 files

原文:https://stackoverflow.com/questions/40619638
更新时间:2023-05-20 07:05

最满意答案

两种选择:

最简单的

添加一个属性到控制器来保存你的DbContext ,然后添加一个将填充的无参数ctor(有效地给它一个控制器的生命周期)。 例如

public class MyController : Controller
{
    private readonly DbContext context;
    public MyController()
    {
        this.context = new DbContext();
    }

    // rest of actions reference `context.<whatever>`
}

更多地参与

使用某种形式的依赖注入器(DI)将控制反转(IoC)引入等式。 然后,让解析器在实例化时将上下文放在控制器中。 然后,新的控制器签名如下所示:

public class MyController : Controller
{
    private readonly DbContext context;
    public MyController(DbContext context)
    {
        this.context = context;
    }

    // rest of actions reference `context.<whatever>`
}

注意:无参数ctor消失了,但是DependencyResolver会在创建控制器时自动插入正确的实例。

从那里,您需要声明DI配置中的哪个实例。 以ninject为例,类似于:

kernel.Bind<DbContexT>().To<MyDbContext>()
    // here's where scope comes in to play:
    // for ninject: https://github.com/ninject/ninject/wiki/Object-Scopes
    //.InTransientScope();
    //.InSingletonScope();
    //.InThreadScope();
    //.InRequestScope();

Fixed by adding some workarounds. Added code below:

Model.context.cs:

    public MyDatabaseContext()
        : base("name=MyDatabaseContextEntities")
    {
    }

    public MyDatabaseContext(string connectionString)
        : base("name=MyDatabaseContextEntities")
    {
        this.Database.Connection.ConnectionString = connectionString;
    }

Controller:

    public static string temporaryConnectionString
    {
        get;
        set;
    }

    FbConnectionStringBuilder fbBuilder = new FbConnectionStringBuilder()
    {
          //code to build your connection
    };

    //connectionString defined as a public variable
    connectionString = fbBuilder.ToString();

    //store to session variable in your DAL
    context.DataConnection.DAL.CurrentConnection = connectionString;
    temporaryConnectionString = connectionString;
    context = new MyDatabaseContext(connectionString);

    return View();

相关问答

更多
  • 两种选择: 最简单的 添加一个属性到控制器来保存你的DbContext ,然后添加一个将填充的无参数ctor(有效地给它一个控制器的生命周期)。 例如 public class MyController : Controller { private readonly DbContext context; public MyController() { this.context = new DbContext(); } // rest of actio ...
  • 以下是生命周期的视图: http://www.flickr.com/photos/60896767@N00/89101625/sizes/l/ 是的,他们被线程/请求共享 你应该写它们是线程安全的。 他们应该是无国籍的 通常他们有一个引用Spring服务的工作。 控制器处理Web层的绑定,验证和路由。 Here's a view of the lifecycle: http://www.flickr.com/photos/60896767@N00/89101625/sizes/l/ Yes, they're ...
  • 你可以选择这样的DB名称: public class MyDataContext : DbContext { public MyDataContext() : base("MyDatabaseName") { Database.DefaultConnectionFactory = new SqlConnectionFactory(myConnectionString); } } You could choose the name of the DB like th ...
  • 看起来您在示例代码中的问题是您正在新建AppContext实例而不是从ServiceProvider解析它。 以这种方式初始化DbContext时,将为上下文隐式创建一个新的ServiceProvider,并且该上下文不会满足Startup.cs中的任何配置。 如果您在OnConfiguring中配置上下文并且对应用程序的其余部分中的依赖项注入不感兴趣,那么这是您希望使用的模式。 在这种情况下,我希望您通过构造函数注入获取AppContext。 对于这种解决方案,您还需要在ServiceCollection ...
  • 您不应该为所有控制器使用相同的dbContext。 这样做不是一个好习惯,因为框架必须跟踪更多实体,如果EF方面出现问题,那么调试也很困难。 每个控制器类使用一个dbContext。 You should not have the same dbContext for all controllers. It is not a good practice to do so because that way the framework has to track a lot more entities and i ...
  • 150实体不是一个巨大的DbContext,但它高于EF在第一个DbContext的初始化中开始出现性能问题的大小。 如果您可以在逻辑上将实体分成负责区域(称为有界上下文),那么您可以考虑使用多个DbContext。 此外,您的应用是否需要使用所有这些实体? 如果没有,您可以简化一些事情。 另请注意,您需要至少EF6才能有效地工作,以前版本的Entity Framework存在多个上下文的问题。 使用多个上下文时也必须小心。 许多人遇到麻烦是因为他们从一个上下文中获取实体,然后在另一个上下文中调用保存更改, ...
  • 我认为这个问题与在IoC容器中注册类型有关。 您使用的是什么IoC容器? 你如何注册CMSDataContext? 也许你应该在AutoFac中使用像InstancePerRequest这样的东西? I think that problem is related to registering types in IoC container. What IoC container are you using? How do you register CMSDataContext? Maybe you shoul ...
  • 您需要两个单独的连接字符串和连接,因此请使用两个不同的上下文,并根据另一个上下文的结果查询一个上下文。 You would need two separate connection strings and connections, so use two different contexts and query one based on the results from the other.
  • ASP.NET Core基于依赖注入,因为你的上下文已经添加到你的dependendy容器中,当你的控制器被实例化时,它会被框架自动注入。 根据评论进行编辑: 你可以设置你的类来支持DI,假设你有两个类。 一种依赖于你的上下文,然后依赖于你的上下文和你的第一类: public class MyClass { private ApplicationDbContext _context; public MyClass(ApplicationDbContext context) { ...
  • 答案很简单: var optionsBuilder = new DbContextOptionsBuilder(); optionsBuilder.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]); var context = new PMSContext(optionsBuilder.Options); User user = new UserFactory(context).Create(WindowsIden ...

相关文章

更多

最新问答

更多
  • h2元素推动其他h2和div。(h2 element pushing other h2 and div down. two divs, two headers, and they're wrapped within a parent div)
  • 创建一个功能(Create a function)
  • 我投了份简历,是电脑编程方面的学徒,面试时说要培训三个月,前面
  • PDO语句不显示获取的结果(PDOstatement not displaying fetched results)
  • Qt冻结循环的原因?(Qt freezing cause of the loop?)
  • TableView重复youtube-api结果(TableView Repeating youtube-api result)
  • 如何使用自由职业者帐户登录我的php网站?(How can I login into my php website using freelancer account? [closed])
  • SQL Server 2014版本支持的最大数据库数(Maximum number of databases supported by SQL Server 2014 editions)
  • 我如何获得DynamicJasper 3.1.2(或更高版本)的Maven仓库?(How do I get the maven repository for DynamicJasper 3.1.2 (or higher)?)
  • 以编程方式创建UITableView(Creating a UITableView Programmatically)
  • 如何打破按钮上的生命周期循环(How to break do-while loop on button)
  • C#使用EF访问MVC上的部分类的自定义属性(C# access custom attributes of a partial class on MVC with EF)
  • 如何获得facebook app的publish_stream权限?(How to get publish_stream permissions for facebook app?)
  • 如何防止调用冗余函数的postgres视图(how to prevent postgres views calling redundant functions)
  • Sql Server在欧洲获取当前日期时间(Sql Server get current date time in Europe)
  • 设置kotlin扩展名(Setting a kotlin extension)
  • 如何并排放置两个元件?(How to position two elements side by side?)
  • 如何在vim中启用python3?(How to enable python3 in vim?)
  • 在MySQL和/或多列中使用多个表用于Rails应用程序(Using multiple tables in MySQL and/or multiple columns for a Rails application)
  • 如何隐藏谷歌地图上的登录按钮?(How to hide the Sign in button from Google maps?)
  • Mysql左连接旋转90°表(Mysql Left join rotate 90° table)
  • dedecms如何安装?
  • 在哪儿学计算机最好?
  • 学php哪个的书 最好,本人菜鸟
  • 触摸时不要突出显示表格视图行(Do not highlight table view row when touched)
  • 如何覆盖错误堆栈getter(How to override Error stack getter)
  • 带有ImageMagick和许多图像的GIF动画(GIF animation with ImageMagick and many images)
  • USSD INTERFACE - > java web应用程序通信(USSD INTERFACE -> java web app communication)
  • 电脑高中毕业学习去哪里培训
  • 正则表达式验证SMTP响应(Regex to validate SMTP Responses)