| File: Dcp\AppResource.cs | Web Access |
| Project: src\src\Aspire.Hosting\Aspire.Hosting.csproj (Aspire.Hosting) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Aspire.Hosting.ApplicationModel; using Aspire.Hosting.Dcp.Model; using System.Diagnostics; namespace Aspire.Hosting.Dcp; [DebuggerDisplay("DcpResourceName = {DcpResourceName}, DcpResourceKind = {DcpResourceKind}")] internal class AppResource: IEquatable<AppResource> { public CustomResource DcpResource { get; } public string DcpResourceName => DcpResource.Metadata.Name; public string DcpResourceKind => DcpResource.Kind; public AppResource(CustomResource dcpResource) { DcpResource = dcpResource; } public virtual List<ServiceAppResource> ServicesProduced { get; } = []; public bool Equals(AppResource? other) { if (other is null) { return false; } var dr = DcpResource; var odr = other.DcpResource; return dr.GetType().Equals(odr.GetType()) && dr.Metadata.Name == odr.Metadata.Name && dr.Metadata.NamespaceProperty == odr.Metadata.NamespaceProperty; } } internal class ServiceAppResource : AppResource { public Service Service => (Service)DcpResource; public ServiceAppResource(Service service) : base(service) { } public override List<ServiceAppResource> ServicesProduced { get { throw new InvalidOperationException("Service resources do not produce any services"); } } } [DebuggerDisplay("ModelResource = {ModelResource}, DcpResourceName = {DcpResourceName}, DcpResourceKind = {DcpResourceKind}")] internal class RenderedModelResource : AppResource, IResourceReference { public IResource ModelResource { get; } public RenderedModelResource(IResource modelResource, CustomResource dcpResource): base(dcpResource) { ModelResource = modelResource; } public new virtual List<ServiceWithModelResource> ServicesProduced { get; } = []; public virtual List<ServiceWithModelResource> ServicesConsumed { get; } = []; } internal sealed class ServiceWithModelResource : RenderedModelResource { public Service Service => (Service)DcpResource; public EndpointAnnotation EndpointAnnotation { get; } public override List<ServiceWithModelResource> ServicesProduced { get { throw new InvalidOperationException("Service resources do not produce any services"); } } public override List<ServiceWithModelResource> ServicesConsumed { get { throw new InvalidOperationException("Service resources do not consume any services"); } } public ServiceWithModelResource(IResource modelResource, Service service, EndpointAnnotation sba) : base(modelResource, service) { EndpointAnnotation = sba; } } internal interface IResourceReference { IResource ModelResource { get; } string DcpResourceName { get; } }