0

I am kind of new to the dependency injection resolver techniques topic. May I know how we can resolve dependency through configuration file section(s). Below are my classes and interface along with the config file.

I am sure that missing some portion of code/setting. Can you please help me with this.

public interface IUserAuthentication
{
    string Authenticate(string username, string password);
    string GetUserRole(string username);
}

public class CloudAppAuthetication : IUserAuthentication
{
    public string Authenticate(string username, string password)
    {
        //Jwt token based authentication logic should be there
        return "This Authenticate method executed from cloud class";
    }

    public string GetUserRole(string username)
    {
        //New logic to user management api call
        return "This GetUserRole method executed from cloud class";
    }
}

public class StandaloneAppAuthetication : IUserAuthentication
{
    public string Authenticate(string username, string password)
    {
        //current logic should be here
        return "This Authenticate method executed from standalone class";
    }

    public string GetUserRole(string username)
    {
        //current logic should be here
        return "This GetUserRole method executed from standalone class";
    }
}

Console application calling of interface method:

class Program
{
    static void Main(string[] args)
    {
        IUnityContainer container = new UnityContainer();
        container.LoadConfiguration("TestContainer");
        IUserAuthentication _userAuthentication = null;
        string validatedUser = _userAuthentication.Authenticate(
            "testuser@user.com", "testpassword");
        string validatedUserRole =
            _userAuthentication.GetUserRole("testuser@user.com");
    }
}

My App.config file of console application is:

<?xml version="1.0" encoding="utf-8"?>
  <configuration>
    <configSections>
       <section name="unity"
  type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,
Microsoft.Practices.Unity.Configuration" />
    </configSections>
    <unity xmlns = "http://schemas.microsoft.com/practices/2010/unity" >
      < container name="TestContainer">
        <register
  type="UnityConfiguration_Testing.IUserAuthentication,UnityConfiguration_Testing"
  mapTo="UnityConfiguration_Testing.StandaloneAppAuthetication,UnityConfiguration_Testing"
        />
      </container>
    </unity>
  <startup>
    <supportedRuntime version = "v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

I am getting object reference not set to an instance of object error. Expecting that StandaloneAppAuthetication class method will get executed as per my configuration.

Steven
  • 166,672
  • 24
  • 332
  • 435
Buddha
  • 185
  • 1
  • 15
  • Where's the code to resolve an instance from the container? You have `IUserAuthentication _userAuthentication = null;` ... – qujck Apr 03 '19 at 07:47
  • You probably want `var _userAuthentication = container.Resolve()` – qujck Apr 03 '19 at 07:50
  • Thank you so much @qujck. You are absolutely correct. After making code change with your suggestion it worked like a charm. – Buddha Apr 03 '19 at 08:00
  • @qujck, may I know how can we do the same with MVC and MVC web api applications?. – Buddha Apr 03 '19 at 08:31

1 Answers1

0

As @qujck suggested I made code change as below which worked fine. Thanks qujck.

using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace UnityConfiguration_Testing
{
    class Program
    {
        static void Main(string[] args)
        {
            IUnityContainer container = new UnityContainer();
            container.LoadConfiguration("TestContainer");
            var _userAuthentication = container.Resolve<IUserAuthentication>();
            string validatedUser = _userAuthentication.Authenticate("testuser@user.com", "testpassword");
            string validatedUserRole = _userAuthentication.GetUserRole("testuser@user.com");
        }
    }
}
Buddha
  • 185
  • 1
  • 15