我正在开发一个 WCF Web 服务,它从基于string providerCode
.
在最高级别,服务调用一个StaticBroker
类,该类检查providerCode
并返回 的适当子类DataManager
,比方说MyDataManager
。然后服务调用MyDataManager.getVehicleFetcherForStop()
返回一个类的实例,该实例VehicleInfoFetcher
用于获取信息。
我对这一切都很陌生,我想我可能设计错了。这是我现在如何做的代码(简化):
服务.svc.cs
// Public-facing web service method
public string getRealtimeInfo(String stopID, string providerCode = "UK")
{
DataManager dm = StaticBroker.Instance.dataManager(stopID);
return dm.getUpcomingVehicleInfoNow(primaryCode);
}
静态经纪人
public sealed class StaticBroker
{
UKDataManager ukDataManager = null;
// Create one instance of each data manager when the Web Service is started,
// to save memory
private StaticBroker()
{
ukDataManager = new UKDataManager();
}
public DataManager dataManager(string providerCode)
{
if (providerCode.Equals(UKDataManager.DEFAULT_PROVIDER_CODE))
return ukDataManager;
// else if...
}
// Most singleton stuff snipped out
private static readonly StaticBroker instance = new StaticBroker();
}
UKDataManager
public class UKDataManager : DataManager
{
public const string DEFAULT_PROVIDER_CODE = "UK";
public string getUpcomingVehicleInfoNow(string stopID)
{
VehicleInfoFetcher infoFetcher;
if ( shouldCheckDB(stopID))
VehicleInfoFetcher infoFetcher = new DatabaseVehicleInfoFetcher("UK");
else
fetcher = new UKLiveVehicleInfoFetcher();
return fetcher.getVehicleInfo(primaryCode).Result; // This is an async method, but we wait for the result
}
}
}
如您所见,我有一个 Singleton StaticBroker
,它本身只存储每种类型的DataManager
. 最后,在 DataManagers 中,创建了执行实际工作的类的实际实例,SomeVehicleFetcher
.
这是一种明智的做法吗?或者当 Web 服务的并发使用率很高时,这些单例和共享实例会导致问题吗?我担心创建大量新实例可能会导致内存问题。如您所见,我并不真正了解应用程序的生命周期/内存周期在 Web 服务中是如何工作的。