2011-05-14 140 views
2

好大家好多的网络服务,从而多单

我有一个项目,倍数Web服务,所以我创造了性能的各种单例类的想法。现在我想创建一个单独的类,并且有我的web服务

例如

public static WebServiceMaster 
{ 
    internal ServiceX WebX; 
    internal ServiceY WebY; 
    ...... 
    public static WEbServiceMaster GetInstance() 
    ..... 
} 

什么想想的实例? 是那么糟糕?

好了,终于做到这一点。我知道这是不完美的

Public NotInheritable Class ServiceProxySingleton 

Private _services As IDictionary(Of ProxyServicesEnum, IServiceDispatcher) = New Dictionary(Of ProxyServicesEnum, IServiceDispatcher) 
Private _dbRepository As IDACommon 

Private Sub New() 
    _dbRepository = New DACommon() 
    LoadServices() 
End Sub 

Private Sub LoadServices() 
    _services.Add(ProxyServicesEnum.eActivity, New ActivityServiceImp(_dbRepository)) 
    _services.Add(ProxyServicesEnum.eAvailability, New AvailabilityServiceImp(_dbRepository)) 
    _services.Add(ProxyServicesEnum.eBrochure, New BrochureServiceImp(_dbRepository)) 
    _services.Add(ProxyServicesEnum.eInformation, New InformationServiceImp(_dbRepository)) 
    _services.Add(ProxyServicesEnum.eMeetingRoom, New MeetingRoomServiceImp(_dbRepository)) 
    _services.Add(ProxyServicesEnum.eMembership, New MembershipServiceImp(_dbRepository)) 
    _services.Add(ProxyServicesEnum.eName, New NameServiceImp(_dbRepository)) 
    _services.Add(ProxyServicesEnum.eReservation, New ReservationServiceImp(_dbRepository)) 
    _services.Add(ProxyServicesEnum.eResvAdvanced, New ResvAdvancedServiceImp(_dbRepository)) 
    _services.Add(ProxyServicesEnum.eSecurity, New SecurityServiceImp(_dbRepository)) 
    _services.Add(ProxyServicesEnum.eStayHistory, New StayHistoryServiceImp(_dbRepository)) 
    _services.Add(ProxyServicesEnum.ePostXml, New PostXmlServiceImp(_dbRepository, ConfigurationServiceSingleton.GetInstance.GetPostXmlConfig)) 
    _services.Add(ProxyServicesEnum.eOxiHttp, New OxiServiceImp(_dbRepository)) 
End Sub 

Public ReadOnly Property Service(ByVal serviceEnum As ProxyServicesEnum) As Object 
    Get 
    If _services.ContainsKey(serviceEnum) Then 
     Return _services.Item(serviceEnum) 
    End If 
    Return Nothing 
    End Get 
End Property 

Public ReadOnly Property GetMeta(ByVal serviceEnum As ProxyServicesEnum) As IDictionary(Of String, MethodIdentityAttribute) 
    Get 
    If _services.ContainsKey(serviceEnum) Then 
     Return _services.Item(serviceEnum).MetaInfo 
    End If 
    Return Nothing 
    End Get 
End Property 

Public Shared Function GetInstance() As ServiceProxySingleton 
    Return NestedPrWireService._instance 
End Function 

Class NestedPrWireService 
    Friend Shared ReadOnly _instance As ServiceProxySingleton = New ServiceProxySingleton() 
    Shared Sub New() 
    End Sub 
End Class 

End Class 

意见和批评,欢迎

+0

看看multiton,也许这就是你要找的。 http://en.wikipedia.org/wiki/Multiton_pattern#C.23 @Carlos和btw singelton不是一种表演模式。也许你应该阅读有关它也 – sra 2011-05-14 06:10:29

回答

0

很好的方法是使用依赖注入。例如Unity

+0

谢谢,我已经在那里此刻供应的依赖性,多数民众赞成助手帮助创建的类的门面一些如何DAO,新ServiceXDAO(WebServiceMaster.ServiceXInterface),新ServiceYDAO(WebServiceMaster.ServiceYInterface)。也许一个好方法是使用ServiceLocator,但我不知道是否有创建单例服务的选项 – 2011-05-14 14:02:00

+0

Unity可以为你创建这些对象:你可以设置你想要的生命周期(每个实例,单例或定义你的)。这个功能你可以在盒子里找到。为什么要重塑自行车?所以,我不知道你为什么要投这个答案。例如,_container.Resolve ()将返回新的MyService或已创建的MyService实例,具体取决于您如何配置Unity。 – VikciaR 2011-05-16 10:41:39

+0

为什么要重塑自行车?不完全是,在这种情况下,我使用的是框架2.0和一个公司extern,并且他们对DI和IoC都是封闭的。真的,我看起来简单但实用,思考应用程序的性能。感谢您的意见 – 2011-05-20 14:54:10