0

タイトルを繰り返しますが、これはWebフォームであり、MVCではありません。また、vb.netを使用しています。

nugetを使用してプロジェクトにninject.webを追加しました。NinjectWebCommonの「RegisterServices」メソッドを次のように構成しました。

Private Shared Sub RegisterServices(kernel As IKernel)
    kernel.Bind(Of ilbdUOW)().[To](Of lbdUOW)()
End Sub

すべてがクリーンにコンパイルされます。単純なWebフォーム(.aspxページ、マスターページなし)を実行すると、次のエラーが発生します。

BC30455: Argument not specified for parameter '_uow' of 'Public Sub New(_uow As lbD.data.lbdUOW)'.

そして、コンパイルされたコードの52行目を指しています。

Line 51:         Public Sub New()
Line 52:             MyBase.New
Line 53:             Dim dependencies() As String

これは(私が信じている)コンパイル時に.aspxページの上部から来ており、「新しい」コンストラクターの次のコードがあります。

<Inject()> _
Public Sub New(_uow As ilbdUOW)
    Uow = _uow
End Sub

(まあ、私は「信じている」と言いますが、「ilbdUOW」をインターフェイスから「lbdUOW」のクラスに変更したかのように、それに応じてエラーメッセージが変更されるので、間違いなくそこから来ています)

「New」コンストラクターの「uow=_uow」行にデバッグ停止を設定し、NinjectWebCommonファイルの「RegisterServices」メソッドに別のデバッグ停止を設定すると、デバッガーは「RegisterServices」デバッグポイントでのみ停止し、取得しません。メインの.aspxページでデバッグ停止を押します。

私は今完全に迷子になっています。私は自分にとって比較的新しいことに頭を悩ませようとしていますが、ほとんどそこに到達していると思いました。私の理解では、NinjectWebCommonの「RegisterServices」のコードは、コンストラクター(.aspxページの「新しい」コンストラクターなど)で参照されるときに「ilbdUOW」インターフェイスのインスタンスが必要であることを認識し、自動的に挿入することで、作業単位インスタンスをデータベースにアクセスできるようにします。

誰かが私を正しい方向に向けることができれば、私は本当に感謝しています、ありがとう。

追加するために編集:@ mipe34

「新しい」コンストラクターではありません。

Public Sub New(ByVal repositoryProvider As IRepositoryProvider)
    MyBase.New()
    CreateDbContext()
    repositoryProvider.DbContext = DbContext
    _RepositoryProvider = repositoryProvider
End Sub

これらのインターフェイスもマップするように「RegisterServices」セクションも設定しましたが、これらの追加のマッピングがそこにあるかどうかに関係なく、エラーは発生しません。その時点に到達する前に失敗するようです。

「RegisterServices」セクションにこれらの行を出し入れしましたが、違いはありません。

    kernel.Bind(Of RepositoryFactories)().[To](Of RepositoryFactories)().InSingletonScope()
    kernel.Bind(Of IRepositoryProvider)().[To](Of RepositoryProvider)()
4

1 に答える 1

2

WebForm は Ninject ではなく ASP.NET によって作成されます WebForms ではコンストラクター インジェクションを使用できません。代わりにプロパティ注入を行う必要があります。

于 2013-01-15T07:46:18.500 に答える