Windsor v3

Here we collect and vote for ideas for next major version of Castle Windsor IoC container

I suggest you ...

You've used all your votes and won't be able to post a new idea, but you can still search and comment on existing ideas.

There are two ways to get more votes:

  • When an admin closes an idea you've voted on, you'll get your votes back from that idea.
  • You can remove your votes from an open idea you support.
  • To see ideas you have already voted on, select the “My feedback” filter and select “My open ideas”.
(thinking…)
Reset

Enter your idea and we'll search to see if someone has already suggested it.

If a similar idea already exists, you can vote and comment on it.

If it doesn't exist, you can post your idea so others can vote on it.

Enter your idea and we'll search to see if someone has already suggested it.

  • Hot ideas
  • Top ideas
  • New ideas
    1. Add convention over configuration features to IoC containers

      NInject and StructureMap both have contextual dependency injection, and Hiro is going to be mostly conventions based.
      It'd be nice if MicroKernel and Windsor supported more conventions-based approach, possibly something similar to what I outlined here: http://kozmic.pl/archive/2009/04/09/convention-based-dependency-injection-with-castle-microkernelwindsor.aspx

      108 votes
      Vote 0 votes Vote Vote
      Vote
      Sign in
      Check!
      (thinking…)
      Reset
      or sign in with
      • facebook
      • google
        Password icon
        I agree to the terms of service

        You'll receive a confirmation email with a link to create a password (optional).

        Signed in as (Sign out)
        You have left! (?) (thinking…)
      • Add ability to override configuration in XML

        The Binsor DSL has the extremely useful Extend macro, but it achieves this by replicating the ComponentModel data model, which isn't ideal.

        So, the proposal is that we allow something along the lines of:

        container.Register(
        ExtendComponent.For<IService>.Parameters( <<so on and so on>>
        )

        Now, this is relatively simple to achieve if you can buffer the component registrations (in that ExtendComponent<For>.Component could return the original ComponentRegistration), but of course that would require a separate "process registrations step". A helper object might be needed.

        The benefits should be relatively obvious. You could have your principal configuration done fluently within the code, with the… more

        25 votes
        Vote 0 votes Vote Vote
        Vote
        Sign in
        Check!
        (thinking…)
        Reset
        or sign in with
        • facebook
        • google
          Password icon
          I agree to the terms of service

          You'll receive a confirmation email with a link to create a password (optional).

          Signed in as (Sign out)
          You have left! (?) (thinking…)
        • Provide more compact, discoverable fluent API

          some people find current fluent API too verbose and hard to discover:
          - connect that for method that takes params IRegistration[] you have to use either Component. or AllTypes.

          Perhaps a default implementation of IWindsorInstaller that exposes protected methods working with nested closures to be more discoverable, would be a good addition

          16 votes
          Vote 0 votes Vote Vote
          Vote
          Sign in
          Check!
          (thinking…)
          Reset
          or sign in with
          • facebook
          • google
            Password icon
            I agree to the terms of service

            You'll receive a confirmation email with a link to create a password (optional).

            Signed in as (Sign out)
            You have left! (?) (thinking…)
          • Inject members to existing instance

            InjectMembers(instance) - resolve dependencies on an existing instance without registering the type in the container. That would be useful for situations where the instance is created by someone else (like the Page instance in ASP.Net WebForms).

            13 votes
            Vote 0 votes Vote Vote
            Vote
            Sign in
            Check!
            (thinking…)
            Reset
            or sign in with
            • facebook
            • google
              Password icon
              I agree to the terms of service

              You'll receive a confirmation email with a link to create a password (optional).

              Signed in as (Sign out)
              You have left! (?) (thinking…)
              started  ·  3 comments  ·  Admin →
            • Expose container-wide defaults for things like Lifestyle

              - Global settings - make it nicer to:
              - Default Lifestyle setting
              - Default disposable tracking setting

              12 votes
              Vote 0 votes Vote Vote
              Vote
              Sign in
              Check!
              (thinking…)
              Reset
              or sign in with
              • facebook
              • google
                Password icon
                I agree to the terms of service

                You'll receive a confirmation email with a link to create a password (optional).

                Signed in as (Sign out)
                You have left! (?) (thinking…)
              • take greater advantage of the container, when extending the container itself

                Do not use special extension points for anything other than Facilities
                and Subsystems.
                For things like IModelInterceptorSelectors, etc just have them
                registered into the container
                and resolve them as needed, much like ILazyComponentLoaders are handled.

                11 votes
                Vote 0 votes Vote Vote
                Vote
                Sign in
                Check!
                (thinking…)
                Reset
                or sign in with
                • facebook
                • google
                  Password icon
                  I agree to the terms of service

                  You'll receive a confirmation email with a link to create a password (optional).

                  Signed in as (Sign out)
                  You have left! (?) (thinking…)
                • A registry class entry point

                  Here is a sample: http://geekswithblogs.net/wesm/archive/2010/02/25/sexy-windsor-registrations.aspx

                  Basically like StructureMap's registry class and FluentNHibernate's mapping classes.

                  8 votes
                  Vote 0 votes Vote Vote
                  Vote
                  Sign in
                  Check!
                  (thinking…)
                  Reset
                  or sign in with
                  • facebook
                  • google
                    Password icon
                    I agree to the terms of service

                    You'll receive a confirmation email with a link to create a password (optional).

                    Signed in as (Sign out)
                    You have left! (?) (thinking…)
                  • [Windsor] Support interception for services created UsingFactoryMethod

                    It would be interesting if Windsor could support the interception of calls made to services created via the 'UsingFactoryMethod' syntax:

                    container.Register(Component.For<ISomeService>().UsingFactoryMethod(()
                    => new
                    SomeServiceImpl(5)).Interceptors(InterceptorReference.ForType<SomeServiceIn terceptor>()).First);

                    Currently, this will generate the following exception when any member of the resolved service is called:

                    System.NotImplementedException: This is a DynamicProxy2 error: the
                    interceptor attempted to 'Proceed' for method 'Int32
                    DoSomething(Int32)' which has no target. When calling method without
                    target there is no implementation to 'proceed' to and it is the
                    responsibility of the interceptor to mimic the implementation (set
                    return value, out arguments etc)

                    6 votes
                    Vote 0 votes Vote Vote
                    Vote
                    Sign in
                    Check!
                    (thinking…)
                    Reset
                    or sign in with
                    • facebook
                    • google
                      Password icon
                      I agree to the terms of service

                      You'll receive a confirmation email with a link to create a password (optional).

                      Signed in as (Sign out)
                      You have left! (?) (thinking…)
                    • 6 votes
                      Vote 0 votes Vote Vote
                      Vote
                      Sign in
                      Check!
                      (thinking…)
                      Reset
                      or sign in with
                      • facebook
                      • google
                        Password icon
                        I agree to the terms of service

                        You'll receive a confirmation email with a link to create a password (optional).

                        Signed in as (Sign out)
                        You have left! (?) (thinking…)
                      • support only Singleton/Transient

                        All other lifetimes can be derived from these two with child containers.

                        Also, supporting only these two fix the invalid situations where lifestyles are incompatible

                        5 votes
                        Vote 0 votes Vote Vote
                        Vote
                        Sign in
                        Check!
                        (thinking…)
                        Reset
                        or sign in with
                        • facebook
                        • google
                          Password icon
                          I agree to the terms of service

                          You'll receive a confirmation email with a link to create a password (optional).

                          Signed in as (Sign out)
                          You have left! (?) (thinking…)
                        • [IoC] expose extension point for selecting properties as noninjectable/optional/mandatory

                          Currently all properties are considered optional dependencies. There's a switch for modifying that but it's pretty limiting.

                          An extension point should be exposed to allow users to plug their own decision logic as to whether the property should ever be injectable, should it be an optional dependency, or mandatory one.

                          5 votes
                          Vote 0 votes Vote Vote
                          Vote
                          Sign in
                          Check!
                          (thinking…)
                          Reset
                          or sign in with
                          • facebook
                          • google
                            Password icon
                            I agree to the terms of service

                            You'll receive a confirmation email with a link to create a password (optional).

                            Signed in as (Sign out)
                            You have left! (?) (thinking…)
                          • [Windsor] UsingFactoryMethod should be merged to Component.For<T>(factory)

                            UsingFactoryMethod method from Fluent API should be made into overload of For<> so that

                            Component
                            .For<IFoo>()
                            .UsingFactoryMethod(kernel => kernel.Resolve<IFooFactory>().CreateFoo())

                            becomes

                            Component
                            .For<IFoo>(kernel => kernel.Resolve<IFooFactory>().CreateFoo())

                            This feels more natural, is consistent with other frameworks, and limits the number of methods on the fluent API which improves discoverability

                            5 votes
                            Vote 0 votes Vote Vote
                            Vote
                            Sign in
                            Check!
                            (thinking…)
                            Reset
                            or sign in with
                            • facebook
                            • google
                              Password icon
                              I agree to the terms of service

                              You'll receive a confirmation email with a link to create a password (optional).

                              Signed in as (Sign out)
                              You have left! (?) (thinking…)
                            • Add proxy support for the DLR.

                              Allow passing an interface and a Dynamic Object, then generate a proxy which delegates to the dynamic.

                              Would be very useful for interoperating with DLR languages / Duck typing.

                              4 votes
                              Vote 0 votes Vote Vote
                              Vote
                              Sign in
                              Check!
                              (thinking…)
                              Reset
                              or sign in with
                              • facebook
                              • google
                                Password icon
                                I agree to the terms of service

                                You'll receive a confirmation email with a link to create a password (optional).

                                Signed in as (Sign out)
                                You have left! (?) (thinking…)
                              • Integrate strongly typed property wiring with fluent registration API

                                Make http://using.castleproject.org/display/IoC/Strongly+Typed+property+wiring+with+Fluent+Registration+API part of the core Windsor code.
                                The startable facility registration already has some Expression<Func<?>> stuff, so why not apply this to any registration.

                                3 votes
                                Vote 0 votes Vote Vote
                                Vote
                                Sign in
                                Check!
                                (thinking…)
                                Reset
                                or sign in with
                                • facebook
                                • google
                                  Password icon
                                  I agree to the terms of service

                                  You'll receive a confirmation email with a link to create a password (optional).

                                  Signed in as (Sign out)
                                  You have left! (?) (thinking…)
                                • Enforce 3-calls pattern by requiring just one call to Install and making container immutable after

                                  Currently the API does not guide users towards "correct" usage. It might be beneficial to re-design it so that it's much more explicit as to what should happen when.
                                  It could do what some other containers do - explicitly split into two phases - registration and usage (like ContainerBuilder -> Container).

                                  3 votes
                                  Vote 0 votes Vote Vote
                                  Vote
                                  Sign in
                                  Check!
                                  (thinking…)
                                  Reset
                                  or sign in with
                                  • facebook
                                  • google
                                    Password icon
                                    I agree to the terms of service

                                    You'll receive a confirmation email with a link to create a password (optional).

                                    Signed in as (Sign out)
                                    You have left! (?) (thinking…)
                                  • Generate proxies to match up lifestyles of components that have different lifestyles

                                    - Generate proxies to match up lifestyles of components that have different life styles.
                                    - So if I am singleton and depends on request scope stuff, I get a proxy that match that up.

                                    3 votes
                                    Vote 0 votes Vote Vote
                                    Vote
                                    Sign in
                                    Check!
                                    (thinking…)
                                    Reset
                                    or sign in with
                                    • facebook
                                    • google
                                      Password icon
                                      I agree to the terms of service

                                      You'll receive a confirmation email with a link to create a password (optional).

                                      Signed in as (Sign out)
                                      You have left! (?) (thinking…)

                                      I’m not sure that this is the best solution. We should certainly somehow address that. We need to detect the scenario and perhaps take advantage of proxies as one possible solution, but I’d be against doing this implicitly by default

                                    • Create a registration-only interface

                                      Create an interface, implemented by the container, that only allows registration. This way, I could restrict the use of the service locator pattern without restricting the ability to actually register components.

                                      3 votes
                                      Vote 0 votes Vote Vote
                                      Vote
                                      Sign in
                                      Check!
                                      (thinking…)
                                      Reset
                                      or sign in with
                                      • facebook
                                      • google
                                        Password icon
                                        I agree to the terms of service

                                        You'll receive a confirmation email with a link to create a password (optional).

                                        Signed in as (Sign out)
                                        You have left! (?) (thinking…)
                                      • 2 votes
                                        Vote 0 votes Vote Vote
                                        Vote
                                        Sign in
                                        Check!
                                        (thinking…)
                                        Reset
                                        or sign in with
                                        • facebook
                                        • google
                                          Password icon
                                          I agree to the terms of service

                                          You'll receive a confirmation email with a link to create a password (optional).

                                          Signed in as (Sign out)
                                          You have left! (?) (thinking…)
                                        • smaller footprint

                                          smaller assembly means smaller memory requirements. think of WP7 scenarios

                                          1 vote
                                          Vote 0 votes Vote Vote
                                          Vote
                                          Sign in
                                          Check!
                                          (thinking…)
                                          Reset
                                          or sign in with
                                          • facebook
                                          • google
                                            Password icon
                                            I agree to the terms of service

                                            You'll receive a confirmation email with a link to create a password (optional).

                                            Signed in as (Sign out)
                                            You have left! (?) (thinking…)
                                          • Resolution of generic types should be driven by generic constraints

                                            Given a generic interface IM<> and two implementations M1<T> where T : ISomeInterface and M2<T>. When we have a class A1 : ISomeInterface and we resolve IM<A1> it should return M1<>, rather than M2<>. When we have a class A2 that does not implement ISomeInterface Resolve<IM<A2>> should return M2<>. Here's a worked example: http://gist.github.com/622123

                                            1 vote
                                            Vote 0 votes Vote Vote
                                            Vote
                                            Sign in
                                            Check!
                                            (thinking…)
                                            Reset
                                            or sign in with
                                            • facebook
                                            • google
                                              Password icon
                                              I agree to the terms of service

                                              You'll receive a confirmation email with a link to create a password (optional).

                                              Signed in as (Sign out)
                                              You have left! (?) (thinking…)
                                            ← Previous 1
                                          • Don’t see your idea?
                                          • Post a new idea…
                                          • Windsor v3

                                            Knowledge Base and Helpdesk