I read an article on Microsoft Docs about using dependency injection in .NET Azure Functions.
Everything works fine, as you can see in the article, it registers CosmosClient
builder.Services.AddSingleton((s) => {
     return new CosmosClient(Environment.GetEnvironmentVariable("COSMOSDB_CONNECTIONSTRING"));
    });
The question is, how can I use Cosmos Client in my function? I do not want to create every time instance of Cosmos Client.
public  class CosmosDbFunction
{
    public CosmosDbFunction()
    {
    }
    [FunctionName("CosmosDbFunction")]
    public  async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        // TODO: do something later
        return null;
    }
}
                You don't have to use an interface.  You can just inject the CosmosClient directly.
There's an example of this in the Cosmos client samples directory which includes the following code:
private CosmosClient cosmosClient;
public AzureFunctionsCosmosClient(CosmosClient cosmosClient)
{
    this.cosmosClient = cosmosClient;
}
For testing, it seems the team creating this client has decided on the approach of making everything abstract/virtual to allow mocking frameworks to override methods as needed. This is touched on in issue #303. See also on Stack Overflow: How do I mock a class without an interface?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With