-
-
Notifications
You must be signed in to change notification settings - Fork 2.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Breaking API changes that have to be done before next major release #3538
Comments
Is Avalonia using / going to use |
The generic host model provided by Dependency injection should be managed managed by MVVM framework (Prism, ReactiveUI, etc), not the UI toolkit. |
when will we have 1.0 version,thank you |
Regarding internal APIs: Microsoft uses special "ref" assemblies (e.g. for Microsoft.Extensions.Configuration.Abstractions). This allows a very fine control regarding the API to be exposed. EDIT: This also means that you can still have "internal" code which is defined as |
I think |
IIRC we've decided to keep ContextMenu as a legacy but still supported API to simplify porting from WPF |
I know when Flyout was implemented and ContextMenu was marked as obsolete there was some uproar. ContextMenu was quickly un-obsoleted. I hope that isn't the permanent plan though. |
You could also declare the classes as "internal" and use them from other assemblies via: aelij uses this in roslynpad to access internals of roslyn |
I just noticed the |
@CollinAlpert it's just a x:Name properties? Yes, it can be changed with no problems, if you want to create a PR. |
@maxkatz6 it's also a |
@CollinAlpert If its a template part I recommend adding the PART_ prefix as well while you are at it. Otherwise, I'll get to it later. |
Roll-up of some things I think should be addressed:
|
This is a tracking issue
While Avalonia is ready for use, we can't really claim that it's 1.0 when we know that certain areas have to be changed in incompatible ways to work properly on various platforms and in various environments.
There will most likely be
0.10
,0.11
and probably0.12
releases, but for widespread Avalonia adoption we need a promise of long-term API stability.After 1.0 we'll still be allowed to deprecate things, but we'll have to keep a compatibility layer for several releases after a feature was deprecated.
So one of the goals in 2020 and probably the start of 2021 would be to focus on such "breaking-change-prone" areas so we could finally release the long awaited 1.0.
Public API contract note
Everything with
Impl
suffix is considered a private implementation detail without any API/ABI compatibility guarantees whatsoever (BTW, we need to add a wrapper for IClipboardImpl, it's been years already). Those can change in any way even in minor version releases.Stuff in platform backens other than
XXXPlatformOptions
andUseXXX
is also not considered to be a stable API. If we need something platform-specific, we still need an API that's not bound to a platform backend. So in general platform backends shouldn't have any public types, unless those are required to setup/configure the backend.Solution-wide internal APIs
We are likely to have some helper methods or classes, that are reusable in the code base, but don't necessary have to be included in the public API contract. So we probably need some kind of Cecil-based post-processing, that would:
to
That would ensure that project-private APIs wont be leaked, but non-public API parts would be still hidden.
Another way is to transform
[Internal]
to[Obsolete("This API is considered to be private to Avalonia and can be changed in incompatible way at any time")]
.Known areas that would cause breaking changes:
XXX.Instance
static properties and move everything to TopLevel'sItemsControl
item container generation API will be changed by WIP: Use ItemsRepeater as base for ItemsPresenter #3388LocalValue
Set Template-provided properties with a separate BindingPriority #2789Things to investigate:
The text was updated successfully, but these errors were encountered: