Add comprehensive dependency injection support with IServiceCollection extension methods #696
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR implements enhanced dependency injection support for the OpenAI .NET library, addressing the feature request for built-in extension methods for
IServiceCollection
. The implementation follows .NET ecosystem standards similar to Azure SDKs, making it easier to integrate OpenAI clients into ASP.NET Core, Blazor, and other .NET applications.Key Features Added
Extension Methods for IServiceCollection
The library now provides convenient extension methods for registering OpenAI clients:
Configuration Integration
Full support for
IConfiguration
binding withappsettings.json
:Environment Variable Support
Automatic fallback to the
OPENAI_API_KEY
environment variable for development scenarios:Implementation Details
Available Extension Methods
AddOpenAI()
,AddOpenAIChat()
,AddOpenAIEmbeddings()
,AddOpenAIAudio()
,AddOpenAIImages()
,AddOpenAIModeration()
AddOpenAIFromConfiguration()
,AddChatClientFromConfiguration()
, etc.AddAllOpenAIClientsFromConfiguration()
Enhanced Configuration Options
The new
OpenAIServiceOptions
class extendsOpenAIClientOptions
with DI-specific settings:OpenAIClientOptions
properties (Endpoint, OrganizationId, ProjectId, etc.)Thread-Safe Singleton Registration
All clients are registered as singletons by default, following the existing recommendation in the README. This maximizes resource efficiency and HTTP connection reuse while maintaining thread safety.
Backward Compatibility
This implementation is fully backward compatible. Existing manual registration patterns continue to work unchanged: