Ҷойгиркунии хидмат чӣ гуна аст?
sobes.tech AI
Ҷавоб аз AI
Service Locator نمونەی دیزاینە، کە پێشکەش دەکات بەردەوامی گشتی بۆ خزمەتگوزاریەکان (ئوبجێکتەکان، کە کارەکانێکی دیاری کراو ئەنجام دەدەن)، بێ ئەوەی کۆدی کڕیار پێویست بێت زانیاری تایبەتی لە جۆرەکانی جێبەجێکردنی ئەم خزمەتگوزاریانە بزانێت. ئەو ئەم پرۆسەیە کۆتایی دەدات بە وەرگرتنی خزمەتگوزاری پێویست.
هەڵبژاردنەکانی Service Locator:
- دەستگەیشتنە ناوەڕاست: ئاسان دەکات وەرگرتنی خزمەتگوزاریەکان لە هەر شوێنێک لە پرۆگرامەکە.
- گۆڕانکاری: ڕێگە دەدات بە سهلەتی گۆڕینی جێبەجێکاریەکانی خزمەتگوزاریەکان بێ ئەوەی کۆدی کڕیار گۆڕانکاری بکات.
کەمبودیەکانی Service Locator (هۆی سەرەکی هێماکەی):
- پەیوەندیدانی تێپەڕە: کۆدی کڕیار ڕوونەوە پێناسە ناکات ئەو پەیوەندیدانە، کە ئەمە ئاسان ناکات فەهمکردنی ئەوەی کە پێویستە چ خزمەتگوزارییەکان بەکاربهێنرێت.
- تاقیکردنەوە: سەختە بۆ تاقیکردنەوەی کلاسیەکان کە بەکار دەهێنێت لە Service Locator، چونکە پەیوەندیدانەکان ناتوانرێن بە ئاسانەوە جێگیر بکرن (mocked).
- شکستنەوەی پرنسپەڵی ئەوەندەیەتی (DIP): جێبەجێکاریەکان بە جێگای وەرگرتنی پەیوەندیدانەکان لە ڕێگەی کونسڕۆکتۆر یان تایبەتمەندیەکان، کلاسیەکە بەشدارییەکی چالاک دەکات.
- کێشە لە بەڕێوەبردنی ژیانی ئەوەندەیەتی: Service Locator زۆر جار ناتوانێت ژیانی ئەوەندەیەتیەکانی خزمەتگوزاریەکان بەڕێوە ببێت (وەک دروستکردنی singleton یان transient objects).
نمونەی جێبەجێکردنی سادە:
public static class ServiceLocator
{
private static Dictionary<Type, object> _services = new Dictionary<Type, object>();
public static void RegisterService<TService>(TService serviceInstance) where TService : class
{
if (_services.ContainsKey(typeof(TService)))
{
throw new InvalidOperationException($"خزمەتگوزاری جۆری {typeof(TService).Name} پێشتر تۆمار کراوە.");
}
_services[typeof(TService)] = serviceInstance;
}
public static TService GetService<TService>() where TService : class
{
if (_services.TryGetValue(typeof(TService), out object service))
{
return (TService)service;
}
throw new InvalidOperationException($"خزمەتگوزاری جۆری {typeof(TService).Name} نەدۆزرایەوە.");
}
}
نمونەی بەکاربردن:
// تۆمارکردنی خزمەتگوزاری
ServiceLocator.RegisterService<ILogger>(new ConsoleLogger());
// وەرگرتنی خزمەتگوزاری
ILogger logger = ServiceLocator.GetService<ILogger>();
logger.LogInfo("Hello, Service Locator!");
لە پێشکەشکردنی کۆدی C#ی ئێستا، زۆر جار Service Locator لەگەڵ بەکارهێنانی IoC containerەکان، کە پێشکەش دەکەن Dependency Injection (DI) تەواو، جێگیر دەکرێت، کە ڕێگای باشترە بۆ بەڕێوەبردنی پەیوەندیدانەکان و زیادکردنی توانای تاقیکردنەوەی کۆد. IoC containerەکان ڕێگە دەدەن بە روونی بڵاوکردنەوەی پەیوەندیدانەکان و خۆکارانە دانانیان، بەڕێوەبردنی پرنسپەڵی DIP.