Asp.net Core 2.1 (DI) Внедрение зависимостей ServiceCollection - PullRequest
0 голосов
/ 08 июня 2018

Я играю с Asp.net Core 2.1. Я просто хочу подтвердить, является ли это плохой реализацией ServiceCollection?

Предложения и исправления приветствуются:)

Я создал BusinessContractFactoryкоторый разрешит мою конкретную службу.

 public T GetInstance<T>() where T : IBusinessContracts
    {                     
        return ServiceObjectBase.ResolveService<T>();
    }

ниже мой класс ServiceObjectBase

public abstract class ServiceObjectBase 
{
    public ServiceObjectBase()
    {

    }
    /// <summary>
    /// Resolve the service of T from the IServiceProvider
    /// </summary>
    /// <typeparam name="T"></typeparam>        
    /// <returns>
    /// </returns>
    public static T ResolveService<T>()
    {
        var provider = GetServices().BuildServiceProvider();

        return provider.GetService<T>();

    }
    /// <summary>
    /// Private Property Service Collection
    /// </summary>
    private static IServiceCollection _serviceCollection { get; set; }
    ///// <summary>
    ///// Get Service Collection
    ///// </summary>
    ///// <returns></returns>  
    private static IServiceCollection GetServices()
    {
        //New instance of Service Collection
        _serviceCollection = new ServiceCollection();

        /*
         Add your Service Collection here
        */
        _serviceCollection.AddBusinessLayerServices();

        return _serviceCollection;
    }

}

в моем классе StartUp.cs

public void ConfigureServices(IServiceCollection services)
    {          

        services.AddMvc();

        services.AddSingleton<IBusinessContractFactory, BuisnessContractFactory>();

    }

и в моем контроллере API

public class ValuesController : Controller
{
    private readonly IBusinessContractFactory _businessFactory;
    public ValuesController(IBusinessContractFactory businessFactory)
    {
        _businessFactory = businessFactory;
    }
    // GET api/values
    [HttpGet]
    public IEnumerable<string> Get()
    {
        var sampleA = _businessFactory.GetInstance<ISampleA>();

        sampleA.BuildA();

        var sampleB = _businessFactory.GetInstance<ISampleB>();

        sampleB.BuildB();

        var sampleC = _businessFactory.GetInstance<ISampleC>();

        sampleC.SampleCFunction();

        return new string[] { "value1", "value2" };
    }  
  }

TIA поделится своими мыслями об этой реализации, поправьте меня, если я ошибаюсь, чтобы я мог улучшить.

...