Comments (1)
The downside of this is that these overloads are only available if the namespace of the extension method is in scope.
That can be a problem when derived classes relying on those overloads are in a different namespace. E.g.,
OnTopic.Repositories.ITopicRepository
OnTopic.Data.Sql.SqlTopicRepository
In this case, if the caller only applies a using
statement for OnTopic.Data.Sql.SqlTopicRepository
, then the defaults won’t be available.
That said, this issue is at least mitigated for interfaces and/or abstract classes intended for use with dependency injection, such as ITopicRepository
, since code references for dependencies should only be aware of the interface or abstract class, and not the concrete implementations, and will thus use the using
statement for the interface (e.g., OnTopic.Repositories
).
The only exception to this is in the composition root, when assembling the dependency graph, where there will be references to the concrete class. (This also applies when registering dependencies via a container.) Since constructors for dependency injection shouldn’t have optional or default parameters, however, this doesn’t affect that case.
This concern, however, may impact classes which are subject to extensibility, but not subject to dependency injection.
The alternative in those cases is to continue to rely on defaults on the interface and virtual methods, as we do today. As “Framework Design Guidelines” warns, however:
A disagreement between an interface declaration and the implementation on a default value creates an unnecessary source of confusion for your users.
As such, this should be carefully considered.
from ontopic-library.
Related Issues (20)
- Mapping: Ensure cache entries are only pulled once
- `ErrorController`: Bypass for static files HOT 3
- `IsCompatible`: Check `MemberAccessor` against expected `Topic` HOT 1
- Base classes over interfaces?
- Refactor handling of default parameters in method overloads
- Ensure `Topics` table can't have a duplicate key for an attribute HOT 1
- Rename `AttributeDictionary` to `AttributeValueDictionary` HOT 2
- Factor associations into `DeleteOrphanedLastModifiedAttributes` HOT 1
- `TopicController` response caching HOT 7
- Improve reflection performance via e.g., `CreateDelegate()` HOT 7
- Introduce an `ErrorController` to simplify ASP.NET Core error handling HOT 5
- Add support for C# 10 generic attributes HOT 1
- Add support for C# 10 implicit global usings HOT 2
- Add mapping support for `DateOnly`, `TimeOnly`
- ASP.NET Core 6 Host Site, Tests HOT 1
- Upgrade to C# 10, Code Analyzers HOT 1
- Update Development Dependencies HOT 1
- Provide `OnTopicOptions` class for `AddTopicSupport()` HOT 1
- Mapping: Support `IDictionary<>` constructor for manual deserialization HOT 3
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 ontopic-library.