On May 17, 2012, at 2:23 PM, Fabrice wrote:
> Here is an implementation that works, thank you for the tips
>
> I've one question : Is it correct to create a DefaultLifetimeScope, or there
> is a way to retrieve one already created ? (See my implementation below)
> Because you write [ThreadStatic] so I put it as a static property.
Since in that scenario, their is no well defined scope boundary, I just picked
thread static since your data access component cannot be shared on a thread.
You can obtain the scope any way you like. Again, the problem is that scope
will never be disposed so if you component has lifecycle concerns (disposable),
they wont be called
>
> Also, I didn't find a way to make a generic scope that take a base scope
> (WcfOperationScopeAccessor) and a fallback scope, because when registering
> the component I didn't find a way to register the scope accessor with an
> existing object:
> return
> componentRegistration.LifestyleScoped<WcfOperationOrTransientScopeAccessor>();
> It could be useful to register like this:
> var scopeAccessor = new
> GenericScopeWithFallback<WcfOperationOrTransientScopeAccessor>(new
> DefaultLifetimeScope());
> return componentRegistration.LifestyleScoped(scopeAccessor);
> But anyway, it's not very important as it's just an easier way, and I think I
> could also make it something like this but I've not yet tried
> return
> componentRegistration.LifestyleScoped<WcfOperationOrTransientScopeAccessor<DefaultLifetimeScope>>();
you could add extension methods to do just that. I suspect what is needed is
an extension method that takes an accessor instance.
>
> My implementation:
> public class WcfOperationOrTransientScopeAccessor : IScopeAccessor
> {
> #region Declarations
> private static DefaultLifetimeScope _defaultLifetimeScope;
> private WcfOperationScopeAccessor _wcfOperationScopeAccessor;
> #endregion
>
> #region Properties
> protected static DefaultLifetimeScope DefaultLifetimeScope
> {
> get
> {
> if (_defaultLifetimeScope == null)
> _defaultLifetimeScope = new DefaultLifetimeScope();
> return _defaultLifetimeScope;
> }
> }
>
> protected WcfOperationScopeAccessor WcfOperationScope
> {
> get
> {
> if (this._wcfOperationScopeAccessor == null)
> this._wcfOperationScopeAccessor = new
> WcfOperationScopeAccessor();
> return this._wcfOperationScopeAccessor;
> }
> }
> #endregion
>
> #region IScopeAccessor implementation
> public ILifetimeScope GetScope(CreationContext context)
> {
> var wcfScope = this.WcfOperationScope.GetScope(context);
> if (wcfScope != null)
> return wcfScope;
> return DefaultLifetimeScope;
> }
>
> public void Dispose()
> {
> this.WcfOperationScope.Dispose();
> }
> #endregion
> }
>
looks ok
good luck
>
>
>
>
> On Thu, May 17, 2012 at 7:12 PM, Craig Neuwirt <[email protected]> wrote:
> You would then use
>
> registration.LifeStyle.Scoped<YourScopeAccessor>();
>
> to register your component
> On May 17, 2012, at 11:41 AM, Fabrice wrote:
>
>>
>>
>> On Thu, May 17, 2012 at 5:28 PM, Craig Neuwirt <[email protected]> wrote:
>>
>> It is certainly possible to do that and off the top of my head, I believe
>> the prior version did that. As mentioned above, that is the wrong behavior
>> since it would be inconsistent.
>> What I currently do is register the components with the general Scoped
>> lifestyle and explicitly control the boundary of the scope. The
>> Container/Kernel has a BeginScope extension method which will start the
>> scope and on disposal remove it. I then put hooks in ASP.NET to begin the
>> scope. I use that option to control my data access as well.
>>
>>
>> I can't use BeginScope because I don't have a strong reference to castle, my
>> application only use a IServiceProvider ... so I would like to only use
>> registration/configuration and let the component resolution as it is now.
>>
>> I've searched on how to create a custom lifestyle, but all sample I've found
>> is for previous Castle version
>> The best will be to use a sort of Composite lifestyle that take a main
>> lifestyle and one (or several) fallback lifestyle. It'll better to not
>> rewrite existing stuff (like PerWcfOperation & Transient) and instead reuse
>> it.
>> Do you have any tips on how to do that ?
>>
>> I've tried to understand the code available in
>> https://github.com/castleproject/Castle.Facilities.Wcf-READONLY/tree/master/src/Castle.Facilities.WcfIntegration/Lifestyles
>> but I'm not sure it's the latest code for Castle 3 ?
>>
>> Thanks for your help
>> Fabrice
>>
>> --
>> 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.
>
>
> --
> 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.