【发布时间】:2020-07-14 00:25:37
【问题描述】:
我已按照Blog 在我的 WebApi 中生成刷新令牌。在 RefreshTokenProvider 类中,他正在访问 AuthenticationRepository 以在表中为生成的刷新令牌创建一行。每件事都完美无缺。但现在我想将依赖注入添加到我的 WebAPI 项目中。对于依赖注入,我使用具有以下配置的 AutoFac
public class IocConfig
{
public static AutofacWebApiDependencyResolver Configure()
{
var builder = new ContainerBuilder();
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<DefaultPrincipalProvider>().As<IPrincipalProvider>();
builder.RegisterType<Logic>().AsSelf().InstancePerRequest();
builder.RegisterType<DataAccess>().AsSelf().InstancePerRequest();
builder.RegisterType<AuthRefreshTokenProvider>().As<IAuthenticationTokenProvider>().SingleInstance();
var container = builder.Build();
var resolver = new AutofacWebApiDependencyResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = resolver;
return resolver;
}
}
Global.asax.cs
protected void Application_Start()
{
IocConfig.Configure();
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
控制器
public class ItemController : ApiController
{
private Logic _logic;
public ItemController(Logic logic)
{
_logic = logic;
}
}
业务逻辑
public partial class Logic
{
IPrincipalProvider _principalProvider;
DataAccess _dataAccess;
string _currentUserId;
public Logic(DataAccess dataAccess,IPrincipalProvider provider)
{
_dataAccess = dataAccess;
}
}
数据访问
public partial class DataAccess
{
public DataAccess()
{
}
}
上述配置一切正常,但我被困在如何配置OAuthAuthorizationServerOptions 上。我需要将BusinessLogic Instance 传递给 AuthRefreshTokenProvider。
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
RefreshTokenProvider = new AuthRefreshTokenProvider(),// Need To use Dependency Injection Here
// In production mode set AllowInsecureHttp = false
AllowInsecureHttp = true
};
AuthRefreshTokenProvider
public class AuthRefreshTokenProvider : IAuthenticationTokenProvider
{
private Logic _logic;
public AuthRefreshTokenProvider(Logic logic)
{
_logic = logic;
}
}
我已经尝试了很多方法来完成这项工作。我知道问题在于在 SingleInstance 中实例化InstancePerRequest()。我一直在阅读很多文章和 stackoverflow 帖子以使其正常工作,但似乎无法使其正常工作
【问题讨论】:
标签: c# asp.net-web-api dependency-injection owin autofac