为什么LifestyleSingleton()不能让我的对象成为单身人士?

时间:2013-07-25 03:26:31

标签: asp.net-mvc-4 castle-windsor

我有一个“主题库”来存储主题对象

ITheme

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的新实例:

RepositoriesInstaller

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

ThemeRepository

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的新实例。即始终在New()上调用ThemeRepository。发生了什么事?

C#或VB.NET代码在答案中可接受

1 个答案:

答案 0 :(得分:1)

这种奇怪行为的原因当然是我的一个愚蠢的错误。

由于编码错误,我在每个Http请求上注册了我的依赖项。这意味着一切都会在第一次请求时按预期工作,但之后会失败。

不要多次初始化和设置Castle Windsor容器。