AzureStorage Configuration with Class Library From a web application
Hi guys!
I'm new to C# development, and have a question regarding using a connection string in appsettings.json to a class library. I have closely followed this SO response, but it seems I am missing something.
I am currently getting an error: InvalidOperationException: Unable to resolve service for type 'System.String' while attempting to activate 'ClassLibrary1.AzureStorage'.
My Setup looks like this:
https://i.redd.it/h83tk1abpxk21.png
I have my connection string stored in appsettings.json like:
"ConnectionStrings": { "AzureStorageString": "ConnectionStringHere" }
My connectionStrings.cs (in application):
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace WebApp { public class ConnectionStrings { public string AzureStorageString { get; set; } } }
My startup.cs looks like this (I'm just highlighting the ConfigureServices function here):
public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddHttpContextAccessor(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); services.AddSingleton<AzureStorage>(); //Configuration for Connection Strings services.Configure<ConnectionStrings>(Configuration.GetSection("ConnectionStrings")); services.AddOptions(); //Register the class that reads the connection string into DI Framework. services.AddTransient<IConnectionInterface, ReadConnectionStringforAzure>(); }
The IConnectionInferface.cs looks like (in application):
using ClassLibrary1; using Microsoft.Extensions.Options; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace WebApp { public interface IConnectionInterface { string ReadConnectionString(string connectionString); } public class ReadConnectionStringforAzure : IConnectionInterface { private ConnectionStrings _connectionStrings; private AzureStorage azureStorage; public ReadConnectionStringforAzure(IOptions<ConnectionStrings> connectionSettings) { _connectionStrings = connectionSettings.Value; azureStorage = new AzureStorage(_connectionStrings.AzureStorageString); } public string ReadConnectionString(string connectionString) { return azureStorage.ReadConnectionString(connectionString); } } }
My AzureStorage.cs (the class library the depends on the connection string):
using System.Collections.Generic; using System.Linq; namespace ClassLibrary1 { public class AzureStorage { private readonly CloudBlobClient _blobClient; private string connectionString; public AzureStorage(string connectionString) { this.connectionString = connectionString; CloudStorageAccount _cloudStorageAccount = CloudStorageAccount.Parse(connectionString); _blobClient = _cloudStorageAccount.CreateCloudBlobClient(); } public string ReadConnectionString(string connectionStringToRead) { return connectionStringToRead; }
I am new to .NET development too. But, it seems like my string is not being read properly to be passed up to the class library. Would appreciate any feedback!
0 comments:
Post a Comment