An alternate way would be,
Create different Services,
public interface IServiceBase
{
public void DoWork();
}
public abstract class ServiceBase : IServiceBase
{
private readonly Config _config = new();
// you can choose what to get, may be instead of this, you can do,
// ServiceBase(IConfiguration configuration, string functionName)
// It's upto you
public ServiceBase(IConfigurationSection configurationSection)
{
configurationSection.Bind(_config);
}
public virtual void DoWork()
{
// TODO
}
}
public interface IService1 : IServiceBase { }
public class Service1 : ServiceBase, IService1
{
public Service1(IConfiguration configuration) : base(configuration.GetSection("Function1")) { }
}
public interface IService2 : IServiceBase { }
public class Service2 : ServiceBase, IService2
{
public Service2(IConfiguration configuration) : base(configuration.GetSection("Function2")) { }
}
Split Functions class,
public class Function1
{
private readonly IService1 service1;
public Function1(IService1 service1)
{
this.service1 = service1;
}
[FunctionName("Function1")]
public void Run([BlobTrigger("funcone-requests/{name}")] Stream myBlob, string name)
{
this.service1.DoWork();
}
}
public class Function2
{
private readonly IService2 service2;
public Function2(IService2 service2)
{
this.service2 = service2;
}
[FunctionName("Function2")]
public void Run([BlobTrigger("functwo-requests/{name}")] Stream myBlob, string name)
{
this.service2.DoWork();
}
}
And in the Startup,
[assembly: FunctionsStartup(typeof(FunctionApp.Startup))]
namespace FunctionApp
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddScoped<IService1, Service1>();
builder.Services.AddScoped<IService2, Service2>();
}
}
}