public MenuService([NotNull] IServiceProvider serviceProvider) { if (serviceProvider == null) { throw new ArgumentNullException("serviceProvider"); } var menuProviders = new ExtensionsCache <MenuProviderInfo, IMenuProvider>(serviceProvider); _menuProvidersLookup = menuProviders .GetAllExtensions() .ToLookup( menuProvider => menuProvider.MenuName, StringComparer.OrdinalIgnoreCase); // WTF? menuProviders .GetAllExtensions() .OfType <IDynamicMenuProvider>() .Select( dynamicMenuProvider => { _menuCache.Drop(dynamicMenuProvider.MenuName); return (dynamicMenuProvider.MenuChanged.Subscribe( arg => _menuChanged.OnNext(dynamicMenuProvider.MenuName))); }); _menuCache = new ElementsCache <string, IMenuRoot>(CreateMenu); }
public MenuService([NotNull] IServiceProvider serviceProvider) { if (serviceProvider == null) throw new ArgumentNullException(nameof(serviceProvider)); var menuProviders = new ExtensionsCache<MenuProviderInfo, IMenuProvider>(serviceProvider); _menuProvidersLookup = menuProviders .GetAllExtensions() .ToLookup( menuProvider => menuProvider.MenuName, StringComparer.OrdinalIgnoreCase); // WTF? //menuProviders // .GetAllExtensions() // .OfType<IDynamicMenuProvider>() // .Select( // dynamicMenuProvider => // { // _menuCache.Drop(dynamicMenuProvider.MenuName); // return // dynamicMenuProvider.MenuChanged.Subscribe( // arg => _menuChanged.OnNext(dynamicMenuProvider.MenuName)); // }); _menuCache = LazyDictionary.Create<string, IMenuRoot>(CreateMenu, false); }
public MenuService([NotNull] IServiceProvider serviceProvider) { if (serviceProvider == null) throw new ArgumentNullException("serviceProvider"); var menuProviders = new ExtensionsCache<MenuProviderInfo, IMenuProvider>(serviceProvider); _menuProvidersLookup = menuProviders .GetAllExtensions() .ToLookup( menuProvider => menuProvider.MenuName, StringComparer.OrdinalIgnoreCase); // WTF? menuProviders .GetAllExtensions() .OfType<IDynamicMenuProvider>() .Select( dynamicMenuProvider => { _menuCache.Drop(dynamicMenuProvider.MenuName); return dynamicMenuProvider.MenuChanged.Subscribe( arg => _menuChanged.OnNext(dynamicMenuProvider.MenuName)); }); _menuCache = new ElementsCache<string, IMenuRoot>(CreateMenu); }
static void Main() { var root = new ServiceContainer(); var strategy = root.CreateStrategy <FruitInfo, FruitAttribute>(type => new FruitInfo(type)); root.ScanExtensions(strategy); var cache = new ExtensionsCache <FruitInfo, IFruit>(root); foreach (var fruit in cache.GetAllExtensions()) { Console.WriteLine(fruit.Name); } }
public Synchronizer([NotNull] IServiceProvider provider) { if (provider == null) throw new ArgumentNullException("provider"); _provider = provider; _syncProvidersCache = new ExtensionsCache<SyncProviderInfo, string, ISyncProvider>(provider); var syncContext = _provider.GetRequiredService<IUIShell>().UISyncContext; _startSyncAsync = _startSync.ObserveOn(syncContext); _endSyncAsync = _endSync.ObserveOn(syncContext); _uiAsyncOp = _provider.GetRequiredService<IUIShell>().CreateUIAsyncOperation(); _disposables = new CompositeDisposable( _startSync.CompleteHelper(), _endSync.CompleteHelper(), Disposable.Create(_uiAsyncOp.OperationCompleted)); }
public Synchronizer([NotNull] IServiceProvider provider) { if (provider == null) { throw new ArgumentNullException("provider"); } _provider = provider; _syncProvidersCache = new ExtensionsCache <SyncProviderInfo, string, ISyncProvider>(provider); var syncContext = _provider.GetRequiredService <IUIShell>().UISyncContext; _startSyncAsync = _startSync.ObserveOn(syncContext); _endSyncAsync = _endSync.ObserveOn(syncContext); _uiAsyncOp = _provider.GetRequiredService <IUIShell>().CreateUIAsyncOperation(); _disposables = new CompositeDisposable( _startSync.CompleteHelper(), _endSync.CompleteHelper(), Disposable.Create(_uiAsyncOp.OperationCompleted)); }