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.
- Dodaj kolejny projekt Class Library do solucji, jeśli jeszcze go nie masz.
- Doinstaluj do niego paczkę NuGet: Microsoft.AspNetCore.App
- 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 🙂