public IObservable<T> Load<T>(Uri uri, Options options = null) { if (!Supports<T>(uri)) throw new NotSupportedException($"Uri not supported: {uri}"); // Todo only passed parsed uri var bundleName = uri.Host; return _bundleManifestLoader.Load() .ContinueWith(m => LoadAllDependencies(m, bundleName, options)) .ContinueWith(x => _cachedLoader .Load(bundleName, options) .DoOnError(ex => x.ForEach(y => _cachedLoader.UnloadDependency(y, bundleName)))) // Todo DRY .Cast<IBundle, T>(); }
public void SetUp() { _cachedLoader = Substitute.For <IBundleCachedLoader>(); // Mock bundleManifest _bundleManifestLoader = Substitute.For <IBundleManifestLoader>(); _bundleManifest = Substitute.For <IBundleManifest>(); _bundleManifestLoader.Load().Returns(Observable.Return(_bundleManifest)); _fixture = new BundleLoader(_cachedLoader, _bundleManifestLoader); }