Я начал писать проект с нуля, поэтому я хотел реализовать DependencyInjection. Выбрал Grace, потому что он уже реализован на старом проекте, его писал не я, так что теперь я столкнулся с сложностями. Пытался написать DependencyInjection в Autofac, но меня не устраивает прописка зависимостей в ConfigureServices или в main. Поэтому я решил остановиться на Grace.
Project setting: ASP.NET Core Web Application, Core 2.2, Grace 7.0.1
DependencyInjectionpublic class GraceContainer : IContainer
{
private DependencyInjectionContainer _container;
private readonly IConfiguration _configuration;
internal GraceContainer(IConfiguration configuration)
{
_configuration = configuration;
_container = ConfigureContainer(configuration);
}
private static DependencyInjectionContainer ConfigureContainer(IConfiguration configuration)
{
var container = new DependencyInjectionContainer();
ConfigureContainer(container, configuration);
return container;
}
public static void ConfigureContainer(IInjectionScope scope, IConfiguration configuration)
{
scope.Configure(c => c.ExportInstance(configuration).As<IConfiguration>());
scope.Configure(c => c.Export<ProjectRepository>().As<IProjectRepository>());
scope.Configure(c => c.Export<ProjectService>().As<IProjectService>());
// possible fix for https://github.com/ipjohnson/Grace/issues/116
scope.Configure(c =>
c.ExcludeTypeFromAutoRegistration("Microsoft.AspNetCore.DataProtection.RegistryPolicyResolver"));
}
public T Get<T>()
{
return _container.Locate<T>();
}
public void Replace<I, T>()
{
_container.Dispose();
_container = ConfigureContainer(_configuration);
_container.Configure(c => c.Export<T>().As<I>());
}
public void Replace<T>(T instance)
{
_container.Dispose();
_container = ConfigureContainer(_configuration);
_container.Configure(c => c.ExportInstance(instance).As<T>());
}
public object GetService(Type serviceType)
{
return _container.Locate(serviceType);
}
}
Startup
public void ConfigureContainer(IInjectionScope scope)
{
GraceContainer.ConfigureContainer(scope, Configuration);
scope.SetupMvc();
}
Program
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseGrace()
.UseStartup<Startup>();
}
Controller
[Produces("application/json")]
[Route("api/auth")]
public class ServiceController : Controller
{
private readonly IProjectRepository _projectRepository;
private readonly IProjectService _projectService;
public ServiceController(IProjectRepository projectRepository, IProjectService projectService)
{
_projectRepository = projectRepository;
_projectService = projectService;
}
/// <summary>
/// Repository List
/// </summary>
[HttpGet("api/repository_from_git_hub")]
public async Task<IActionResult> GetGitHubRepositories(string login, DateTime startDate = new DateTime()) =>
new OkObjectResult(await _projectService.ProjectPages(login, startDate));
}
И в итоге что я получил после запуска
Помогите пожалуйста, кто знает как решить эту проблему, дебаг мнне ничего не показал.
P.S. Swagger работает з пустыми ендпойнтами
Ломает Сваггер не Grace, а то что в контроллере по дефолту присваювается DateTime startDate = new DateTime()
[HttpGet("api/repository_from_git_hub")]
public async Task<IActionResult> GetGitHubRepositories(string login, DateTime startDate) =>
new OkObjectResult(await _projectService.ProjectPages(login, startDate));
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Столкнулся с тем, что DOTween неравномерно изменяет значение
Пытаюсь реализовать форму регистрации для БДПосле запуска Winform выдает ошибку
Пишу админ бота для Телеграма и мне нужно проверить пользователя на админ права, и если он не просто участник а админ, то код должен работать,...
Я не понимаю, как работать с Entity FrameworkПосле Laravel и его ОРМ мне это кажется совершенно недружелюбной технологией с кучей граблей