Thanks all for the suggestions, Each has its own merits, however I can't see one solution that would solve the problem.
Spring.Net will inject a new object at each call, and will dispose the object when it goes out of scope at the end of it's life. For the record I feel dirty every time I have to write , public IPricingService PricingService { private get; set;} using(PricingService){ } it feels wrong, but thats how spring is configured here. I think I will have to use a Session/Context type approach, Cheers. Davy, "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live." - Martin Golding On Tue, Jan 25, 2011 at 09:39, James Chapman-Smith <ja...@enigmativity.com>wrote: > Hi David, > > > > It’s easy to force developers to call Dispose but your library calls must > use a particular signature. > > > > Given an interface definition like so: > > > > public interface IPricingService : IDisposable > > { > > IEnumerable<IPrice> GetPrices(int @ref, DateTime date, > PricingProviders pricingProviders); > > } > > > > Implement the service like this: > > > > public class PricingService : IPricingService > > { > > private PricingService(); > > > > public static T Using<T>(Func<IPricingService, T> func) > > { > > using (IPricingService pricingService = new PricingService()) > > { > > return func(pricingService); > > } > > } > > > > public IEnumerable<IPrice> GetPrices(int @ref, DateTime date, > PricingProviders pricingProviders) { ... } > > > > public void Dispose() { ... } > > } > > > > Then your developers call the service like this: > > > > var prices = PricingService.Using(ps => ps.GetPrices(10, DateTime.Now, > PricingProviders.All)); > > > > The only way to access the service is through the static Using function > that calls dispose when the function is done. > > > > You can still use closures to get at the IPricingService instance if need > be, but it will be disposed when the function finishes. > > > > How’s that? > > > > Cheers. > > > > James. > > > > *From:* ozdotnet-boun...@ozdotnet.com [mailto: > ozdotnet-boun...@ozdotnet.com] *On Behalf Of *David Rhys Jones > *Sent:* Monday, 24 January 2011 23:08 > > *To:* ozDotNet > *Subject:* Forcing Dispose to be Called. > > > > > Hi all, > > Background: > > I've got a service connection that is limited to 5 logins, (internal app > written in another dept, Java Webservice not WCF compatible.), I've > implemented a library (C# 3.5) that calls this and a number of different > services to provide a coherent data source for our Excel (2003) > applications. > In my dispose, I clean everything up correctly, connections are closed, > webservice is disposed etc. > > Problem: > > I need to find a way to force the developpers in my team and in the other > teams that use my library to call the Dispose method after each use of the > library. > > Is there a pattern or does anyone have an idea, how I can put a limit on > how long the object can be used for? > I can think of some really kludgy ways using elapsed time and throwing an > exception. > > > > Examples: > > > Good : all calls are closed, webservice is disposed, sockets closed etc. > > // Spring.Net > public IPricingService PricingService { private get; set; } > > public IEnumerable<IPrice> GetPrices(int ref, DateTime date) > { > using (PricingService) > { > return > PricingService.GetPrices(ref,date,PricingProviders.All); > } > } > > > Bad : object is not closed, open sockets and the login used for this call > will block until the webservice timeout. > > // Spring.Net > public IPricingService PricingService { private get; set; } > > public IEnumerable<IPrice> GetPrices(int ref, DateTime date) > { > return > PricingService.GetPrices(ref,date,PricingProviders.All); > } > > > thanks > > Davy, > > > "Always code as if the guy who ends up maintaining your code will be a > violent psychopath who knows where you live." > > - Martin Golding > > >