using PipServices3.Commons.Refer;
using PipServices3.Commons.Run;
using PipServices3.Commons.Config;


public class MyComponentA: IReferenceable, IUnreferenceable, IConfigurable, IOpenable, IExecutable
{
    private bool _open = false;

    public MyComponentA()
    {
        Console.WriteLine("MyComponentA has been created.");
    }

    public void Configure(ConfigParams config)
    {
        Console.WriteLine("MyComponentA has been configured.");
    }

    public void SetReferences(IReferences references)
    {
        Console.WriteLine("MyComponentA's references have been defined.");
    }

    public void UnsetReferences()
    {
        Console.WriteLine("References cleared");
    }

    public bool IsOpen()
    {
        return this._open;
    }

    public async Task OpenAsync(string correlationId)
    {
        Console.WriteLine("MyComponentA has been opened.");
    }

    public async Task CloseAsync(string correlationId)
    {
        Console.WriteLine("MyComponentA has been closed.");
    }

    public async Task<object> ExecuteAsync(string correlationId, Parameters args)
    {
        Console.WriteLine("Executing");
        var result = args;
        return result;
    }
}