static void Main(string[] args) { //var container = new Container(); //container.Register<IFoo, Foo>(); //container.Register<IBar, Bar>(LifeCycle.Transient); //var BarService = container.GetService<IBar>(); //var BarService2 = container.GetService<IBar>(); //var FooService = container.GetService<IFoo>(); //var FooService2 = container.GetService<IFoo>(); #region test containerBuilder var service = new ServiceCollection(); service.AddTransient <IFoo, Foo>() .AddScoped <IBar>(_ => new Bar()) .AddSingleton <IBaz>(new Baz()); var factory = new ContainerProviderFactory(); var temp = Assembly.GetEntryAssembly(); var builder = factory.CreateBuilder(service).Register(Assembly.GetEntryAssembly()); var container = factory.CreateServiceProvider(builder); GetServices(container); GetServices(container); Console.WriteLine($"\nroot container is disposed"); (container as IDisposable)?.Dispose(); #endregion }
private async Task DownloadArtifactAsync( IExecutionContext executionContext, ServerBuildArtifact buildArtifact, ArtifactDefinition artifactDefinition, string localFolderPath) { var downloadFolderPath = Path.Combine(localFolderPath, buildArtifact.Name); var buildArtifactDetails = artifactDefinition.Details as BuildArtifactDetails; if ((buildArtifact.Resource.Type == null && buildArtifact.Id == 0) || // bug on build API Bug 378900 string.Equals(buildArtifact.Resource.Type, ArtifactResourceTypes.FilePath, StringComparison.OrdinalIgnoreCase)) { executionContext.Output(StringUtil.Loc("RMArtifactTypeFileShare")); if (!PlatformUtil.RunningOnWindows) { throw new NotSupportedException(StringUtil.Loc("RMFileShareArtifactErrorOnNonWindowsAgent")); } string fileShare; if (buildArtifact.Id == 0) { fileShare = new Uri(buildArtifact.Resource.DownloadUrl).LocalPath; } else { fileShare = new Uri(Path.Combine(buildArtifact.Resource.DownloadUrl, buildArtifact.Name)).LocalPath; if (!Directory.Exists(fileShare)) { // download path does not exist, log and fall back var parenthPath = new Uri(buildArtifact.Resource.DownloadUrl).LocalPath; executionContext.Output(StringUtil.Loc("RMArtifactNameDirectoryNotFound", fileShare, parenthPath)); fileShare = parenthPath; } } if (!Directory.Exists(fileShare)) { // download path does not exist, raise exception throw new ArtifactDownloadException(StringUtil.Loc("RMArtifactDirectoryNotFoundError", fileShare, WindowsIdentity.GetCurrent().Name)); } executionContext.Output(StringUtil.Loc("RMDownloadingArtifactFromFileShare", fileShare, downloadFolderPath)); var fileShareArtifact = new FileShareArtifact(); await fileShareArtifact.DownloadArtifactAsync(executionContext, HostContext, artifactDefinition, fileShare, downloadFolderPath); } else if (buildArtifactDetails != null && string.Equals(buildArtifact.Resource.Type, ArtifactResourceTypes.Container, StringComparison.OrdinalIgnoreCase)) { executionContext.Output(StringUtil.Loc("RMArtifactTypeServerDrop")); // Get containerId and rootLocation for the artifact #/922702/drop string containerUrl = buildArtifact.Resource.Data; string[] parts = containerUrl.Split(new[] { '/' }, 3); if (parts.Length < 3) { throw new ArtifactDownloadException(StringUtil.Loc("RMArtifactContainerDetailsNotFoundError", buildArtifact.Name)); } int containerId; string rootLocation = parts[2]; if (!int.TryParse(parts[1], out containerId)) { throw new ArtifactDownloadException(StringUtil.Loc("RMArtifactContainerDetailsInvalidError", buildArtifact.Name)); } string rootDestinationDir = Path.Combine(localFolderPath, rootLocation); executionContext.Output(StringUtil.Loc("RMDownloadingArtifactFromFileContainer", containerUrl, rootDestinationDir)); var containerFetchEngineOptions = new ContainerFetchEngineOptions { ParallelDownloadLimit = executionContext.Variables.Release_Parallel_Download_Limit ?? ContainerFetchEngineDefaultOptions.ParallelDownloadLimit, DownloadBufferSize = executionContext.Variables.Release_Download_BufferSize ?? ContainerFetchEngineDefaultOptions.DownloadBufferSize }; executionContext.Output(StringUtil.Loc("RMParallelDownloadLimit", containerFetchEngineOptions.ParallelDownloadLimit)); executionContext.Output(StringUtil.Loc("RMDownloadBufferSize", containerFetchEngineOptions.DownloadBufferSize)); IContainerProvider containerProvider = new ContainerProviderFactory(buildArtifactDetails, rootLocation, containerId, executionContext).GetContainerProvider( ArtifactResourceTypes.Container); using (var engine = new ContainerFetchEngine.ContainerFetchEngine(containerProvider, rootLocation, rootDestinationDir)) { engine.ContainerFetchEngineOptions = containerFetchEngineOptions; engine.ExecutionLogger = new ExecutionLogger(executionContext); await engine.FetchAsync(executionContext.CancellationToken); } } else { executionContext.Warning(StringUtil.Loc("RMArtifactTypeNotSupported", buildArtifact.Resource.Type)); } }
private async Task DownloadArtifactAsync( IExecutionContext executionContext, ServerBuildArtifact buildArtifact, ArtifactDefinition artifactDefinition, string localFolderPath, BuildHttpClient buildClient, XamlBuildHttpClient xamlBuildClient, DefinitionType definitionType, int buildId) { var downloadFolderPath = Path.Combine(localFolderPath, buildArtifact.Name); var buildArtifactDetails = artifactDefinition.Details as BuildArtifactDetails; if ((buildArtifact.Resource.Type == null && buildArtifact.Id == 0) || // bug on build API Bug 378900 string.Equals(buildArtifact.Resource.Type, WellKnownArtifactResourceTypes.FilePath, StringComparison.OrdinalIgnoreCase)) { executionContext.Output("Artifact Type: FileShare"); string fileShare; if (buildArtifact.Id == 0) { fileShare = new Uri(buildArtifact.Resource.DownloadUrl).LocalPath; } else { fileShare = new Uri(Path.Combine(buildArtifact.Resource.DownloadUrl, buildArtifact.Name)).LocalPath; if (!Directory.Exists(fileShare)) { // download path does not exist, log and fall back var parenthPath = new Uri(buildArtifact.Resource.DownloadUrl).LocalPath; executionContext.Output(StringUtil.Loc("RMArtifactNameDirectoryNotFound", fileShare, parenthPath)); fileShare = parenthPath; } } if (!Directory.Exists(fileShare)) { // download path does not exist, raise exception throw new ArtifactDownloadException(StringUtil.Loc("RMArtifactDirectoryNotFoundError", fileShare)); } executionContext.Output(StringUtil.Loc("RMDownloadingArtifactFromFileShare", fileShare)); var fileShareArtifact = new FileShareArtifact(); await fileShareArtifact.DownloadArtifactAsync(executionContext, HostContext, artifactDefinition, fileShare, downloadFolderPath); } else if (buildArtifactDetails != null && string.Equals(buildArtifact.Resource.Type, WellKnownArtifactResourceTypes.Container, StringComparison.OrdinalIgnoreCase)) { executionContext.Output("Artifact Type: ServerDrop"); // Get containerId and rootLocation for the artifact #/922702/drop string[] parts = buildArtifact.Resource.Data.Split(new[] { '/' }, 3); if (parts.Length < 3) { throw new ArtifactDownloadException(StringUtil.Loc("RMArtifactContainerDetailsNotFoundError", buildArtifact.Name)); } int containerId; string rootLocation = parts[2]; if (!int.TryParse(parts[1], out containerId)) { throw new ArtifactDownloadException(StringUtil.Loc("RMArtifactContainerDetailsInvaidError", buildArtifact.Name)); } IContainerProvider containerProvider = new ContainerProviderFactory(buildArtifactDetails, rootLocation, containerId, executionContext).GetContainerProvider( WellKnownArtifactResourceTypes.Container); string rootDestinationDir = Path.Combine(localFolderPath, rootLocation); var containerFetchEngineOptions = new ContainerFetchEngineOptions { ParallelDownloadLimit = 4, CancellationToken = executionContext.CancellationToken }; using (var engine = new ContainerFetchEngine.ContainerFetchEngine(containerProvider, rootLocation, rootDestinationDir)) { engine.ContainerFetchEngineOptions = containerFetchEngineOptions; engine.ExecutionLogger = new ExecutionLogger(executionContext); await engine.FetchAsync(); } } else { executionContext.Warning(StringUtil.Loc("RMArtifactTypeNotSupported", buildArtifact.Resource.Type)); } }