OAuthAuthorizationServerProvider
を実装しました。私はOAuthAuthorizationServerProvider
の実装にIOAuthService
(私の認証サービス)を注入します。 IOAuthServiceの実装は、コンストラクタのパラメータを介してDbContextを返します。したがって、OAuthAuthorizationServerProviderはDbContextをシングルトンとして提供します。ミドルウェアをコミットするためにdbcontextを挿入
私の実装にDbContext
を挿入するにはOAuthAuthorizationServerProvider
Autofac
をWebリクエストスコープごとに使用するにはどうすればよいですか?
私は、次のコードを使用してdbcontext
を登録しようとした場合:
builder.RegisterType<OAuthProviderContext>().As<DbContext>().InstancePerWebRequest();
が、私はエラーが発生します。新しいスコープがHttpRequestを関連付けることができませんでした。
public class ADAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
private readonly IAppSettings _appSettingsProvider;
private readonly IOAuthServiceProvider _oauthServiceProvider;
public ADAuthorizationServerProvider(IAppSettings appSettingsProvider,
IOAuthServiceProvider oauthServiceProvider)
{
_appSettingsProvider = appSettingsProvider;
_oauthServiceProvider = oauthServiceProvider;
}
public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
//code
}
public class OAuthServiceProvider : IOAuthServiceProvider
{
private readonly IRefreshTokenRepository _refreshTokenRepository;
private readonly IClientRepository _clientRepository;
private readonly IUserRepository _userRepository;
private readonly IUnitOfWork _unitOfWork;
public OAuthServiceProvider(IRefreshTokenRepository refreshTokenRepository,
IClientRepository clientRepository,
IUserRepository userRepository,
IUnitOfWork unitOfWork)
{
_refreshTokenRepository = refreshTokenRepository;
_clientRepository = clientRepository;
_userRepository = userRepository;
_unitOfWork = unitOfWork;
}
public async Task AddRefreshToken(RefreshToken token)
{
//code...
}
public async Task DeleteRefreshToken(string tokenId)
{
//code...
}
public async Task<Client> FindClient(string clientName)
{
//code...
}
public async Task<RefreshToken> FindRefreshToken(string tokenId)
{
//code...
}
public async Task<User> FindUser(string username)
{
//code...
}
}
public class ClientRepository : BaseReadonlyRepository<Guid, Client>, IClientRepository
{
public ClientRepository(DbContext dbContext) : base(dbContext)
{
}
public async Task<Client> GetByName(string name)
{
//code...
}
}
public class RefreshTokenRepository : BaseRepository<string, RefreshToken>, IRefreshTokenRepository
{
public RefreshTokenRepository(DbContext dbContext) : base(dbContext)
{
}
}
public class UserRepository : BaseReadonlyRepository<Guid, User>, IUserRepository
{
public UserRepository(DbContext dbContext) : base(dbContext)
{
}
public async Task<User> GetByName(string username)
{
//code...
}
}
builder.RegisterType<OAuthProvider>().As<DbContext>().InstancePerLifetimeScope() //I give DbContext as singleton here.
`
関連するコードを含めることはできますか? – Wellspring
それを正しくフォーマットしてください... –
スタックトレース?完全な例外?また、あなたは 'InstancePerWebRequest'を使用していますが、コードは' InstancePerLifetimeScope'と言っています - それは? –