Giter Club home page Giter Club logo

Comments (7)

dadhi avatar dadhi commented on May 24, 2024

@YairHalberstadt I don't want to intrude, but deterministic ordering (whatevet it is) seems important, no?

from stronginject.

YairHalberstadt avatar YairHalberstadt commented on May 24, 2024

@dadhi how would you recommend we meaningfully order the decorators? I.e the ordering will happen to be deterministic, if only because StrongInject is deterministic, but should there be a specific order in which they should run, and which is simple for users to understand and reorder?

If not I would suggest to make sure your decorators do not depend on running in a particular order.

from stronginject.

YairHalberstadt avatar YairHalberstadt commented on May 24, 2024

I don't want to intrude

On the contrary, you're input is highly valued! It's great to have the opinion of someone whose spent far more time working on IOC containers than I have!

from stronginject.

YairHalberstadt avatar YairHalberstadt commented on May 24, 2024

Note that attributes are not considered to be ordered by the CLI spec, so I would prefer not to depend on the order of attributes.

from stronginject.

dadhi avatar dadhi commented on May 24, 2024

On the contrary, you're input is highly valued! It's great to have the opinion of someone whose spent far more time working on IOC containers than I have!

Thanks. I wanted to speak because you are formulating the feature similar to what I did and thought 3 years ago. Now I know more. And the most important thing that Decorators (in a wider sense) are super powerful and provide a user-driven customization without introducing ad-hoc features into containers. To name a few - custom initializing and disposing logic.

If not I would suggest to make sure your decorators do not depend on running in a particular order.

It is not always possible.

Note that attributes are not considered to be ordered by the CLI spec, so I would prefer not to depend on the order of attributes.

For attributed registrations you may consider adding int? RelativeOrder (the name is just an example) attribute property to guarantee the order if orderA > orderB and not guarantee the order if property is not set.
I did this myself for the attributed registrations in my lib (which are supported via MEF based extension).

from stronginject.

dadhi avatar dadhi commented on May 24, 2024

@YairHalberstadt

that Decorators (in a wider sense)

What I mean here and relating to the fact that you already have a support for factory methods:

  • "Decorator" for A maybe a constructor of type implementing A and accepting the A as parameter.
  • "Decorator" for A maybe a factory method returning A and accepting the A as parameter.
  • "Decorator" constructor or factory method may accept other parameters which help to serve the decoration process (configs, services, etc.)
  • "Decorator" of A does not support decoration of multiple A parameters.

Thats it :)

Enabling the unified support for the factory method decorators provides a natural (user-customized) creation pipelines.

Again I don't want to drive your design, consider this just an info sharing.

from stronginject.

YairHalberstadt avatar YairHalberstadt commented on May 24, 2024

Thanks for the input @dadhi

I think there's definitely quite a few further things that need to be hashed out: for example how do we order decorators defined in seperate modules? Is this order parameter global? If so it becomes very unwieldy to pick it since you need to know the order of all other decorators to pick your order correctly.

Perhaps it will be enough to say that the order of decorators is only defined within a module. The order of decorators defined in different modules is arbitrary (but deterministic).

from stronginject.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.