Controller MVC i/lub API w osobnej bibliotece Class Library

Controller MVC i/lub API w osobnej bibliotece Class Library

Wstęp

Dodawanie kontrolera do osobnej biblioteki może być użyteczne w przypadku, gdy na przykład tworzysz plugin lub system, który korzysta z pluginów. Lub z jakiegoś jeszcze innego powodu chcesz wydzielić część kontrolerów do innego projektu. W .NET robi się to bardzo prosto.

Krok po kroku

Zakładam, że masz już istniejącą solucję z kontrolerami API, czy też MVC.

  1. Dodaj kolejny projekt Class Library do solucji, jeśli jeszcze go nie masz.
  2. Doinstaluj do niego paczkę NuGet: Microsoft.AspNetCore.App
  3. Podczas rejestracji serwisów dodaj:
services.AddMvc().AddApplicationPart(assembly);

Zmienna assembly to oczywiście Twoje assembly z ClassLibrary, w którym masz kontrolery. Możesz to pobrać na kilka sposobów. Jeśli taką rejestrację przeprowadzasz z jakiejś extension method w swojej ClassLibrary, np:

public static class ServiceCollectionExtensions
{
    public static IServiceCollection(this IServiceCollection services)
    {
         services.AddMvc().AddApplicationPart(Assembly.GetExecutingAssembly());
    }
}

Jeśli jednak rejestrację przeprowadzasz z jakiegoś powodu z głównej aplikacji, to najprościej pobrać Assembly po konkretnej klasie.

Załóżmy, że Twój kontroler mieści się w takiej klasie:

namespace API.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class AccountController : ControllerBase
    {
        //
    }
}

Wtedy wystarczy pobrać assembly z tej właśnie klasy:

var assembly = typeof(API.Controllers.AccountController).Assembly;
services.AddMvc().AddApplicationPart(assembly);

To wszystko. Ta prosta „sztuczka” może sprawić, że Twój projekt stanie się bardziej czytelny i bardziej modularny.

Dzięki za przeczytanie artykułu. Jeśli znalazłeś jakiś błąd albo czegoś nie rozumiesz, koniecznie daj znać w komentarzu. Jeśli uważasz, że ta „sztuczka” jest super przydatna i ma też inne zastosowania, to też się podziel 🙂

Podziel się artykułem na: