Skip to content

Repository files navigation

Dynamically inject dependency

Extending the below interface help to resolve configured services as per your own custom logic. Please refer this project for more information.

public interface IServicesProvider<TInterface>
{
        /// <summary>
        /// The method returns corresponding resolved object from service container for the key
        /// </summary>
        /// <param name="key">The key<see cref="string"/></param>
        /// <returns>The implementation of <see cref="TInterface"/></returns>
        TInterface GetInstance(string key);
}

public class ServicesProvider<TInterface> : IServicesProvider<TInterface>
{
        /// <summary>
        /// Defines the httpContextAccessor field
        /// </summary>
        private readonly IHttpContextAccessor httpContextAccessor;

        /// <summary>
        /// Initializes a new instance of the <see cref="ServicesProvider{TInterface}"/> class.
        /// </summary>
        /// <param name="contextAccessor">The contextAccessor<see cref="IHttpContextAccessor"/> object</param>
        public ServicesProvider(IHttpContextAccessor contextAccessor)
        {
            this.httpContextAccessor = contextAccessor;
        }

        /// <summary>
        /// The method returns corresponding resolved object from service container for the key
        /// </summary>
        /// <param name="key">The key<see cref="string"/></param>
        /// <returns>The implementation of <see cref="TInterface"/></returns>
        public TInterface GetInstance(string key)
        {
            var service = this.GetService();
            return service(key);
        }

        /// <summary>
        /// The method returns service container that can be used to resolve and inject object dynamically
        /// </summary>
        /// <returns>The <see cref="Func{string, TInterface}"/></returns>
        private Func<string, TInterface> GetService()
        {
            return (Func<string, TInterface>)this.httpContextAccessor.HttpContext
                .RequestServices.GetService(typeof(Func<string, TInterface>));
        }
}

Register the above interface and implementation class with IoC container

services.AddSingleton(typeof(IServicesProvider<>), typeof(ServicesProvider<>));

About

No description or website provided.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages