Friday, March 8, 2019

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!

AzureStorage Configuration with Class Library From a web application Click here
  • Blogger Comment
  • Facebook Comment

0 comments:

Post a Comment

The webdev Team