0

我想在 JwtTokenValidated 事件处理程序上使用生活方式 PerWebRequest 注册一个类的现有实例。我正在使用 ASP.NET Core OWIN。我正在使用 AspNetBoilerplate。

4

1 回答 1

3

您不能使用特定的生活方式注册现有实例:

注册实例忽略生活方式:当您注册现有实例时,即使您指定了生活方式,它也会被忽略。注册实例也会为您设置实现类型,因此如果您尝试手动执行此操作,则会引发异常。

你可以注册一个相当于PerWebRequest生活方式的类型:

IocManager.IocContainer.Register(Component.For<TestService>()
    .LifestyleCustom<MsScopedLifestyleManager>());

TestService然后在您的事件处理程序中注入(或解析) :

public MyEventHandler(TestService testService)
{
    // ...
}

替代方案:dotnet core web 应用程序中的 Castle Windsor 生活方式

ASP.NET Core 有自己的“范围”生命周期,即“每个请求”。查看它的文档:https ://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection

使用示例:

services.AddScoped<ICharacterRepository, CharacterRepository>();

你应该在课堂上ConfigureServices的方法里面做。Startup

于 2018-04-02T12:11:14.740 回答