예제 #1
0
        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);
        }
예제 #2
0
파일: MenuService.cs 프로젝트: rsdn/janus
		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);
		}
예제 #3
0
        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);
            }
        }
예제 #5
0
        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));
        }
예제 #6
0
        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));
        }