Asp.net core mvc'deki başka bir denetleyiciden GET yöntemine nasıl erişilir?

Aug 18 2020

İki denetleyicim var: OcorrenciasAPI ve IgnicoesAPI. Denetleyicim IgnicoesAPI'deki GET yöntemine OcorrenciasAPI denetleyicisinden erişmem gerekiyor. Bunu yapmak için en iyi yaklaşım nedir?

Yanıtlar

BijuKalanjoor Aug 18 2020 at 14:56

Bu, sorunuzun tam cevabı değildir, ancak bu sorununuzu çözebilir. GET yöntemi içindeki kodunuzu ortak bir sınıfa yeniden düzenleyin ve bu sınıfa her iki denetleyiciden erişin. Aşağıda örnek kod ekleniyor.

Modeli

public sealed class Person
{
    public int ID { get; set; }
    public string Name { get; set; }
}

Depo

public class PersonRepository
{
    public IEnumerable<Person> GetPeople()
    {
        return new List<Person>()
        {
            new Person{ID = 1, Name = "Name 1" },
            new Person{ID = 2, Name = "Name 2" }
        };
    }
}

İlk Api Denetleyicisi

[Route("api/[controller]")]
[ApiController]
public class MyFirstApiController : ControllerBase
{
    private readonly PersonRepository personRepository = new PersonRepository();

    [HttpGet]
    public IEnumerable<Models.Person> Get()
    {
        return personRepository.GetPeople();
    }
}

İkinci Api Denetleyicisi

[Route("api/[controller]")]
[ApiController]
public class MySecoundApiController : ControllerBase
{
    private readonly PersonRepository personRepository = new PersonRepository();
    [HttpGet]
    public IEnumerable<string> Get()
    {
        // Calling same repository here.
        var people = personRepository.GetPeople();

        return people.Select(p=> p.Name);
    }
}
BruceAdams Aug 18 2020 at 14:58

Paylaşılan işlevselliğe sahip yeni bir sınıf oluşturun, onu startup.cs dosyanıza bir hizmet olarak ekleyin ve ardından denetleyicilerinize enjekte edin.

public interface IMyService
{
    string MyMethod();
}

public class MyService : IMyService
{
    public string MyMethod()
    {
        throw new NotImplementedException();
    }
}

Startup.cs

services.AddTransient<IMyService, MyService>();

OcorrenciasAPI yapıcısı

  private readonly IMyService _myService;

    public OcorrenciasAPI (IMyService  myService)
    {
       _myService = myService
    }

IgnicoesAPI yapıcısı

  private readonly IMyService _myService;

    public IgnicoesAPI(IMyService  myService)
    {
       _myService = myService
    }

Kullanım

var result = _myService.MyMethod();