Open CuddleBunny opened 2 months ago
It's an interesting idea. With your suggestion, what would you expect the interface of "CustomFilter" to look like?
@jimmyca15 - I haven't gone too deep on the allocation code after I saw it was all private and I couldn't extend it myself. Could it be as simple as:
public interface IContextualVariantFeatureFilter<TContext> : IContextualFeatureFilter<TContext> {
string Variant { get; set; }
}
Hi, @CuddleBunny Thank you for your suggestion. This is an interesting idea.
But, there is one thing I want to call out here. For the code snippet you provided here, I found that you were using .NET Feature Management
schema to declare a variant feature flag. We had a PR to remove the variant & telemetry support from the .NET FM schema. The reason is that, starting from v4.0.0, we are going to embrace the Microsoft Feature Management schema which will replace .NET FM schema to be the primary schema for the .NET feature management library. Please see here and #408.
Now, our latest releases have fully supported the Microsoft FM schema. The latest preview release 4.0.0-preview3 can still recognize the variant feature flag specified in .NET schema but our next preview release will only recognize variant feature flag specified in Microsoft FM schema.
Besides, all the example projects in preview branch and example code snippets in our public doc for preview version have been changed to Microsoft FM schema. You can have a look at them. Thank you so much!
@zhiyuanliang-ms - I saw the PR for the schema changes but hadn't looked into it yet. The docs I found for variants was in the release/v4
branch. I see that they were changed in the preview
branch. If I understand the new schema correctly, the result would be something like the following, but I suspect the underlying code wouldn't change much?
{
"feature_management": {
"feature_flags": [
{
"id": "MyVariantFeatureFlag",
"enabled": true,
"allocation": {
"default_when_enabled": "Small",
"client_filters": [
{
"name": "CustomFilter",
"parameters": {
"SomeParam": "SomeValue"
},
"variant": "Big"
}
]
},
"variants": [
{
"name": "Big"
},
{
"name": "Small"
}
]
}
]
}
}
@CuddleBunny The new variant feature flag configuration you provided is correct.
I suspect the underlying code wouldn't change much
You are right. The code didn't change much.
Variants are going to be a huge boon to this library and I'm excited to leverage them. I often find myself creating custom filters that evaluate based on the application state rather than the traditional user centric targeting scenarios. It would be great if we could allocate variants based on these filters. Perhaps something like: