0

テーマ オブジェクトを格納する「テーマ リポジトリ」があります。

Iテーマ

Public Interface ITheme
    Property Name As String
    Property Url As String
End Interface

IThemeRepository

Public Interface IThemeRepository
    Property Themes As IList(Of ITheme)
    Sub Add(theme As ITheme)
End Interface

アプリケーションのセットアップ中に、いくつかのテーマをリポジトリに追加したいと考えています。その後、何でもメモリ内データベースのようなものとしてリポジトリにアクセスできるようにしたいと考えています。これは、リポジトリがシングルトンのライフスタイルを持つ必要があることを意味します。次のコードでも、ThemeRepository の新しいインスタンスは常にインスタンス化されます。

リポジトリインストーラー

Public Class RepositoriesInstaller
    Implements IWindsorInstaller

    Public Sub Install(container As Castle.Windsor.IWindsorContainer,
        store As Castle.MicroKernel.SubSystems.Configuration.IConfigurationStore) _
            Implements IWindsorInstaller.Install
        container.Register(Classes.FromAssembly(Assemblies.Infrastructure) _
                           .BasedOn(Of IThemeRepository) _
                           .WithServiceDefaultInterfaces _
                           .LifestyleSingleton)
    End Sub
End Class

テーマリポジトリ

Public Class ThemeRepository
    Implements IThemeRepository

    Public Sub New()
        Themes = New List(Of ITheme)
    End Sub

    Public Sub Add(theme As ITheme) Implements IThemeRepository.Add
        Themes.Add(theme)
    End Sub

    Public Property Themes As IList(Of ITheme) Implements IThemeRepository.Themes
End Class

ThemeRepositoryサービスは常に正常に検出されますが、シングルトンではありません。の新しいインスタンスThemeRepositoryは常に解決されます。IeNew()は常に呼び出されThemeRepositoryます。どうしたの?

(回答では C# または VB.NET コードを使用できます)

4

1 に答える 1

1

この奇妙な動作の原因は、もちろん、私のばかげた間違いでした。

不十分なコーディングのミスにより、すべての Http リクエストに依存関係を登録していました。これは、最初のリクエストではすべてが期待どおりに機能するが、その後は失敗することを意味していました。

Castle Windsor コンテナーを複数回初期化およびセットアップしないでください。

于 2013-07-25T04:51:32.420 に答える