Right, my bad.

The CreationContext.RequestedType will give you what you need.

@K


On 08/06/2012 8:50 AM, npinski wrote:
Hey Krzystof, your last reply got caught in my spam filter for some
reason.

I just tried this syntax and unfortunately now I get the following
exception (even before "YourFactory" is called):

Castle.Core.Internal.LateBoundComponent is not a
GenericTypeDefinition. MakeGenericType may only be called on a type
for which Type.IsGenericTypeDefinition is true.


Full stack trace:
[InvalidOperationException: Castle.Core.Internal.LateBoundComponent is
not a GenericTypeDefinition. MakeGenericType may only be called on a
type for which Type.IsGenericTypeDefinition is true.]
    System.RuntimeType.MakeGenericType(Type[] instantiation) +9484789
Castle.MicroKernel.Handlers.DefaultGenericHandler.ResolveCore(CreationContext
context, Boolean requiresDecommission, Boolean instanceRequired) in e:
\OSS.Code\Castle.Windsor\src\Castle.Windsor\MicroKernel\Handlers
\DefaultGenericHandler.cs:52
    Castle.MicroKernel.Handlers.AbstractHandler.Resolve(CreationContext
context, Boolean instanceRequired) in e:\OSS.Code\Castle.Windsor\src
\Castle.Windsor\MicroKernel\Handlers\AbstractHandler.cs:771
    Castle.MicroKernel.Handlers.AbstractHandler.Resolve(CreationContext
context) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\MicroKernel
\Handlers\AbstractHandler.cs:369
Castle.MicroKernel.Resolvers.DefaultDependencyResolver.ResolveServiceDependency(CreationContext
context, ComponentModel model, DependencyModel dependency) in e:
\OSS.Code\Castle.Windsor\src\Castle.Windsor\MicroKernel\Resolvers
\DefaultDependencyResolver.cs:390
Castle.MicroKernel.Resolvers.DefaultDependencyResolver.Resolve(CreationContext
context, ISubDependencyResolver contextHandlerResolver, ComponentModel
model, DependencyModel dependency) in e:\OSS.Code\Castle.Windsor\src
\Castle.Windsor\MicroKernel\Resolvers\DefaultDependencyResolver.cs:243
Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateConstructorArgumentsCore(ConstructorCandidate
constructor, Object[] arguments, CreationContext context, Type[]
signature) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\MicroKernel
\ComponentActivator\DefaultComponentActivator.cs:353
Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateConstructorArguments(ConstructorCandidate
constructor, CreationContext context, Type[]& signature) in e:\OSS.Code
\Castle.Windsor\src\Castle.Windsor\MicroKernel\ComponentActivator
\DefaultComponentActivator.cs:338
Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.Instantiate(CreationContext
context) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\MicroKernel
\ComponentActivator\DefaultComponentActivator.cs:90
Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.InternalCreate(CreationContext
context) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\MicroKernel
\ComponentActivator\DefaultComponentActivator.cs:70
Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.Create(CreationContext
context) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\MicroKernel
\ComponentActivator\AbstractComponentActivator.cs:75
Castle.MicroKernel.Lifestyle.AbstractLifestyleManager.Resolve(CreationContext
context) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\MicroKernel
\Lifestyle\AbstractLifestyleManager.cs:42
Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleManager.Resolve(CreationContext
context) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\MicroKernel
\Lifestyle\PerWebRequestLifestyleManager.cs:55
Nancy.BootStrappers.Windsor.HybridPerWebRequestLifestyleManager`1.Resolve(CreationContext
context) +125
Castle.MicroKernel.Handlers.DefaultHandler.ResolveCore(CreationContext
context, Boolean requiresDecommission, Boolean instanceRequired) in e:
\OSS.Code\Castle.Windsor\src\Castle.Windsor\MicroKernel\Handlers
\DefaultHandler.cs:61
    Castle.MicroKernel.Handlers.AbstractHandler.Resolve(CreationContext
context, Boolean instanceRequired) in e:\OSS.Code\Castle.Windsor\src
\Castle.Windsor\MicroKernel\Handlers\AbstractHandler.cs:771
Castle.MicroKernel.Handlers.AbstractHandler.TryResolve(CreationContext
context) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\MicroKernel
\Handlers\AbstractHandler.cs:376
    Castle.MicroKernel.DefaultKernel.TryResolveComponent(IHandler
handler, Type service, IDictionary additionalArguments) in e:\OSS.Code
\Castle.Windsor\src\Castle.Windsor\MicroKernel\DefaultKernel.cs:915
    Castle.MicroKernel.DefaultKernel.ResolveAll(Type service,
IDictionary arguments) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor
\MicroKernel\DefaultKernel_Resolve.cs:277
    Castle.MicroKernel.DefaultKernel.ResolveAll(Type service) in e:
\OSS.Code\Castle.Windsor\src\Castle.Windsor\MicroKernel
\DefaultKernel_Resolve.cs:250
    Castle.Windsor.WindsorContainer.ResolveAll(Type service) in e:
\OSS.Code\Castle.Windsor\src\Castle.Windsor\Windsor
\WindsorContainer.cs:896
    Castle.Windsor.WindsorContainer.ResolveAll() in e:\OSS.Code
\Castle.Windsor\src\Castle.Windsor\Windsor\WindsorContainer.cs:891
Nancy.Bootstrappers.Windsor.WindsorNancyAspNetBootstrapper.GetAllModules(IWindsorContainer
container) +63
Nancy.Bootstrapper.NancyBootstrapperWithRequestContainerBase`1.GetAllModules(NancyContext
context) +78
    Nancy.Routing.RouteCache..ctor(INancyModuleCatalog moduleCatalog,
IModuleKeyGenerator moduleKeyGenerator, INancyContextFactory
contextFactory) +112



On May 17, 1:07 am, Krzysztof Koźmic <[email protected]>
wrote:
.UsingFactoryMethod((k,m,c) => YourFactory(m.Implementation));

On 17/05/2012 5:35 PM, Nik Pinski wrote:







Could you be a little more clear?  This really isn't much to go on,
and while I understand conceptually the kind of reflection the factory
method would have to do, I don't understand how to register the
generic MyGenericObject<T> where T is passed in to the factory method...
On Tue, May 15, 2012 at 2:59 AM, Krzysztof Koźmic
<[email protected] <mailto:[email protected]>> wrote:
     yes
     On 15/05/2012 8:54 AM, npinski wrote:
         That's fine.  But i'm not sure I understand...what kind of
         signature
         would the configuration have to have?  I assume you are
         implying the
         type of the generic parameter would need to be passed in to the
         factory method?
         On May 11, 3:45 pm, Krzysztof
         Koźmic<[email protected]
         <mailto:[email protected]>>
         wrote:
             You can but since c# doesn't support that your factory
             method would have
             to do some reflection.
             @K
             On 12/05/2012 4:27 AM, npinski wrote:
                 Hi there,
                 Is there a way to register a WindsorContainer to
                 resolve a generic
                 type using a generic factory method?
                 I know I can do registration like:
                 Component.For<IMyService>().ImplementedBy<MyServiceImpl>()
                 and
                 
Component.For<MyObject>().UsingFactoryMethod(MyObjectFactory.Create)
                 and even
                 
Component.For(typeof(IMyGenericService<>)).ImplementedBy(typeof(MyGenericSe
                 rviceImpl<>))
                 what I'm looking for is something like:
                 
Component.For(typeof(MyGenericObject<>)).UsingFactoryMethod(MyGenericObject
                 Factory.Create<>())
                 Is there a way to do this in a clean way?  I started
                 peripherally
                 reading about IGenericImplementationMatchingStrategy,
                 and Typed
                 Factory Facilities, but this seems like overkill for
                 what I'm doing.
                 The workaround I have right now is to create a wrapper for
                 MyGenericObject<>, and have an interface for the
                 wrapper, which I can
                 then register with the aforementioned syntax
                 
Component.For(typeof(IMyGenericService<>)).ImplementedBy(typeof(MyGenericSe
                 rviceImpl<>))
                 Thanks in advance, guys!
     --
     You received this message because you are subscribed to the Google
     Groups "Castle Project Development List" 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-devel%[email protected]>.
     For more options, visit this group at
    http://groups.google.com/group/castle-project-devel?hl=en.
--
Nik.
--
You received this message because you are subscribed to the Google
Groups "Castle Project Development List" 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-devel?hl=en.


--
You received this message because you are subscribed to the Google Groups "Castle 
Project Development List" 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-devel?hl=en.

Reply via email to