Я пытаюсь получить доступ к одной из моих служб из вызова Configure в Startup.cs в ядре aspnet. Однако я делаю следующее, но получаю следующую ошибку: «Не зарегистрирован сервис для типа UserService». Теперь я знаю, что он зарегистрирован, потому что я могу использовать его в контроллере, поэтому я просто делаю что-то не так, когда дело касается его использования здесь. Пожалуйста, кто-нибудь может указать мне правильное направление. Я рад, что выбрал другой подход к настройке Tus, если есть лучший способ добиться того, чего я хочу.
var userService = app.ApplicationServices.GetRequiredService<UserService>();
userService.UpdateProfileImage(file.Id);
Ниже я хочу использовать
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
... Other stuff here...
app.InitializeSimpleInjector(container, Configuration);
container.Verify();
app.UseTus(httpContext =>
{
var restaurantEndpoint = "/restaurant/images";
var userEndpoint = "/account/images";
var endPoint = "/blank/images";
if (httpContext.Request.Path.StartsWithSegments(new PathString(restaurantEndpoint)))
{
endPoint = restaurantEndpoint;
}
if (httpContext.Request.Path.StartsWithSegments(new PathString(userEndpoint)))
{
endPoint = userEndpoint;
}
return new BranchTusConfiguration
{
Store = new TusDiskStore(@"C:\tusfiles\"),
UrlPath = endPoint,
Events = new Events
{
OnBeforeCreateAsync = ctx =>
{
return Task.CompletedTask;
},
OnCreateCompleteAsync = ctx =>
{
return Task.CompletedTask;
},
OnFileCompleteAsync = async ctx =>
{
var file = await ( (ITusReadableStore)ctx.Store ).GetFileAsync(ctx.FileId, ctx.CancellationToken);
var userService = app.ApplicationServices.GetRequiredService<UserService>();
userService.UpdateProfileImage(file.Id);
}
}
};
});
... More stuff here...
};
Моя конечная цель - переместить это в расширение IApplicationBuilder, чтобы очистить мой startup.cs, но это ни на что не должно повлиять, если оно работает из startup.cs
Редактировать: Добавить, чтобы показать регистрацию пользователя. В методе InitializeSimpleInjector, который я пропустил, есть множество других вещей, которые регистрируются и пересекаются. можете добавить все, если нужно ..
public static void InitializeSimpleInjector(this IApplicationBuilder app, Container container, IConfigurationRoot configuration)
{
// Add application presentation components:
container.RegisterMvcControllers(app);
container.RegisterMvcViewComponents(app);
container.Register<UserService>(Lifestyle.Scoped);
container.CrossWire<IServiceProvider>(app);
container.Register<IServiceCollection, ServiceCollection>(Lifestyle.Scoped);
}