yeap,

If you want to do interception you'd be better of to intercept Dispose, since you're taking advantage of C#'s 'using' statement

similar to what I did here:
http://kozmic.pl/archive/2010/01/27/transparently-releasing-components-in-windsor.aspx
or here:
http://kozmic.pl/archive/2010/03/11/advanced-castle-windsor-ndash-generic-typed-factories-auto-release-and-more.aspx

please treat it as temporary workaround :)
Krzysztof

On 2010-04-13 19:21, Bailey Ling wrote:
spoke too soon.  scrap that idea...you'll get a disposed instance.

2010/4/13 Bailey Ling <[email protected] <mailto:[email protected]>>

    lol, yeah i figured i'd be screwed whichever way i go until the
    code is refactored into separate components.  at this point i'm
    just trying to get some unit tests going!

    anywho, here's a clean way of getting around the TFF keeping
    references for those interested:

     public class AutoReleaseInterceptor : IInterceptor
        {
            public void Intercept(IInvocation invocation)
            {
                object instance = null;
                try
                {
                    invocation.Proceed();
                    instance = invocation.ReturnValue;
                }
                finally
                {
                    var factory = invocation.Proxy as IGenericFactory;
                    if (factory != null && instance != null)
                    {
                        factory.Release(instance);
                    }
                }
            }
        }



    2010/4/13 Krzysztof Koźmic (2) <[email protected]
    <mailto:[email protected]>>

        inline:

        On 13 Kwi, 16:28, bling <[email protected]
        <mailto:[email protected]>> wrote:
        > i've been playing around with different ideas and i've yet
        to come up
        > with the best one that doesn't leave a sour taste in my
        mouth (when
        > applied to the codebase in question).
        >
        > IFactory<T>
        >  - pros: single ctor injection, can create any type
        >  - cons: is not clear what the actual dependences are.
         basically
        > another way of pretending to be a service locator.

        yeap, that's just smart impl. of service locator (which I
        consider to
        be an antipattern when IoC container is involved).

        >
        > IConcreteImplementationFactory
        >  - pros: explicit definition of dependency
        >  - cons: if i keep this up, when i'm "done" my constructors
        will have
        > about 20 args

        Well, 20 args, does not mean there's something wrong with that
        approach ;)
        it means your component in question is farm from doing just
        one thing.
        As you refactor the code and split the responsibilities the
        arguments
        count
        will go down as well. That's what I like about .ctor injection
        - it
        makes SRP
        violation very obvious.

        >
        > Func<T, TResult>
        >  - pros: flexible, and can hook in with the anonymous arg
        overloads
        > for custom creation.  can be explicit/implement depend on
        generic
        > version or not.
        >  - cons: 20 properties instead T_T

        plus it's yet another form of SeviceLocator. You may however use
        closed delegate instead (Func<IDao>)
        BTW, if you don't mind to testdrive beta software you may want to
        checkout my spike that adds delegate-based factories to Windsor
        
http://code.assembla.com/kkozmic/subversion/nodes/Garage/Castle.LightweightFactoryFacility

        It does not use nested container, so if your base container uses
        NoTrackingReleasePolicy your components released via delegate
        won't be
        tracked either.

        Note however that this is not official part of Castle. At this
        point
        it's an experiment, and while I'm happy to answer your
        questions about
        it and listen
        to your feedback I take no responsibility whatsoever if if
        blows your
        app up. ;) Use at your own risk.

        Krzysztof

        >
        > (and no, rewrite is not an option...)
        >
        > so far i've been leaning more and more towards the Func way
        of doing
        > things, which requires that the container doesn't keep track of
        > burden.  if u got any ideas it'd be appreciated ;-)
        >
        > On Apr 13, 7:03 am, Krzysztof Koźmic (2)
        <[email protected] <mailto:[email protected]>> wrote:
        >
        > > Remember that not-releasing the components (when using
        NoTracking
        > > policy) has its own set of problems (dependencies (of
        dependencies)
        > > are not properly cleared).
        > > If you're sure you want to do it, the way outlined above
        should do the
        > > trick for you. I'd also try to make your factory interface
        more
        > > specific,
        > > i.e. IDal CreateDal() instead of T Create<T>().
        >
        > > Krzysztof
        >
        > > On 13 Kwi, 15:47, Bailey Ling <[email protected]
        <mailto:[email protected]>> wrote:
        >
        > > > hehe...
        >
        > > > IMO i share the view that transients should not be
        tracked by the container,
        > > > but also, that i'm in a position where i have an
        extremely large legacy
        > > > codebase violating every principle of SOLID, backed with
        no unit nor
        > > > integration tests! (think 10,000 line files with 1,000
        line methods, x200
        > > > files).  in this scenario, having no burden tracking is
        closest to the
        > > > original implementation.  it's hard enough as is
        avoiding a service locator.
        >
        > > > for cases where it needed to hit the database, i was
        using the TFF like
        > > > this:
        >
        > > > using (var dal = _factory.Create<IDal>())
        > > > {
        > > >   // dal.GetDataSet();
        >
        > > > }
        >
        > > > unexpectedly, every time i hit the database i leaked a
        dal instance.  in
        > > > other cases, i was rerouting the creation of user
        sessions to the factory.
        > > > that one's a different story as sessions are stored all
        over the place and
        > > > cannot easily be predicted how they're cleaned up.
        >
        > > > 2010/4/13 Krzysztof Koźmic (2) <[email protected]
        <mailto:[email protected]>>
        >
        > > > > and why are you using NoTrackingReleasePolicy in the
        first place?
        >
        > > > > --
        > > > > You received this message because you are subscribed
        to the Google Groups
        > > > > "Castle Project Users" group.
        > > > > To post to this group, send email to
        [email protected]
        <mailto:[email protected]>
        > > > > .
        > > > > To unsubscribe from this group, send email to
        > > > > [email protected]
        
<mailto:castle-project-users%[email protected]><castle-project-users%[email protected]
        <mailto:castle-project-users%[email protected]>>
        > > > > .
        > > > > For more options, visit this group at
        > > > >http://groups.google.com/group/castle-project-users?hl=en.
        >
        >

        --
        You received this message because you are subscribed to the
        Google Groups "Castle Project Users" group.
        To post to this group, send email to
        [email protected]
        <mailto:[email protected]>.
        To unsubscribe from this group, send email to
        [email protected]
        <mailto:castle-project-users%[email protected]>.
        For more options, visit this group at
        http://groups.google.com/group/castle-project-users?hl=en.



--
You received this message because you are subscribed to the Google Groups "Castle Project Users" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en.

--
You received this message because you are subscribed to the Google Groups "Castle 
Project Users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/castle-project-users?hl=en.

Reply via email to