Comments (4)
To open back up the discussion to see if we can come up with a good approach we can build off what was proposed previously which was the following
services.AddSingleton<IFunctionality, SecretSaucev1>() // v1 - this is the default version
.OverrideForFeature<IFunctionality, SecretSaucev2>("NewEnhancedVersion") // v2 - this is the new version
I like this proposal by @philcarbone.
Consumption for this can be done through a service that is added into by the feature management package.
public interface IFeatureService<T>
{
Task<T> GetValue<T>();
}
IFeatureService would evaluate the state of the "NewEnhancedVersion" and return which of the features should be returned based on the initial registration of features. This is **late binding**. It does not use the state of the feature during the call to
Services.OverrideForFeatureit uses the state during
IFeatureService.GetValue()`. This allows dynamic change of implementation during lifetime of the application and even different implementation on different requests.
Here would be an example usage.
public class MyType
{
private readonly IFeatureService<IFunctionality> _secretSauce
public MyType(IFeatureService<IFunctionality> secretSauce)
{
_secretSauce = secretSauce.GetValue();
}
public async Task DoSomething()
{
IFunctionality secretSauce = await _secretSauce.GetValue();
// Use it.
}
}
from featuremanagement-dotnet.
Any news about this? Just came across this problem now and our solution atm is to inject all versions and the have a provider for each type. It would be nice if this library provided something for this out of the box.
from featuremanagement-dotnet.
@SpaceOgre #335 We are implementing the new feature called variant-based injection. Hopefully, this can go with the next preview release.
from featuremanagement-dotnet.
@SpaceOgre I noticed that in .NET 8, registering service with a key is possible. Maybe it would be helpful for your case.
https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-preview-7/#keyed-services-support-in-microsoft-extensions-dependencyinjection
from featuremanagement-dotnet.
Related Issues (20)
- ISessionManager is not mentioned in README
- Suggest to have app.UseFeatureManagement HOT 8
- Silent failure in TargetingTelemetryInitializer HOT 10
- The TargetingId should be included in the FeatureEvaluation event even if it's null/empty. HOT 4
- Targeting evaluation is CPU dependent. HOT 4
- Remove the support for variants and telemetry from the .NET feature flag schema HOT 14
- Include Targeting Information on outgoing telemetry HOT 2
- Support .NET 8 Targeting framework in Microsoft.FeatureManagement.Telemetry.ApplicationInsights.AspNetCore
- Target netstandard2.* in Microsoft.FeatureManagement.Telemetry.ApplicationInsights
- The approach to telemetry (using custom `ITelemetryPublisher`) seems overengineered and counter to modern OpenTelemetry abstractions HOT 35
- Add Default Http Targeting Context Accessor
- Consider moving `TargetingHttpContextMiddleware` to the App Insights package HOT 2
- No instance of ITargetingContextAccessor is available for variant assignment. HOT 6
- FeatureManagerSnapshot should snapshot TargetingContext as well
- EvaluationDataToApplicationInsights example
- Can't Set FeatureFilters In FeatureManager In .NET Framework Application HOT 7
- Update Package metadata
- Add a link to preview on main readme
- Cannot use the TargetingFilter in .NET class library project HOT 3
- Nuget "Microsoft.FeatureManagement.AspNetCore" Version 3.3.0 - Multiple feature filters match the configured filter named 'Microsoft.TimeWindow' HOT 7
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from featuremanagement-dotnet.