ok,

right now I think you'd have to register them all manually upfront. In the next version we have a new extension point for handling scenarios like that:
https://github.com/castleproject/Castle.Windsor/blob/master/src/Castle.Windsor/MicroKernel/Handlers/IGenericImplementationMatchingStrategy.cs

You will be able to register this as a single open generic component and then on the fly provide Windsor with missing information (what type of data context to use)

Krzysztof

On 09/03/2011 1:03 AM, Rob wrote:
Suppose you have a linq to sql datacontext named MyDataContext that
maps the tables for Customer and Order.
The desired outcome is the following registrations
IRepository<Customer>  implemented by LinqRepository<Customer,
MyDataContext>
and
IRepository<Order>  implemented by LinqRepository<Order, MyDataContext>

On Mar 7, 8:05 pm, Krzysztof Koźmic<[email protected]>
wrote:
What is U?

How do *you *know which U is the right one?

Is it like

public class LinqRepo<Customer, CustomerU>  :IRepository<Customer>  {}

is there some kind of convention like that?

Krzysztof

On 08/03/2011 1:36 AM, Rob wrote:







If someone asks for IRepo<T>, how would windsor know to return
LinqRepo<T,U>    ?
There has to be something that tells the container that entity type T
comes from DataContext U.
On Mar 4, 6:08 pm, Krzysztof Koźmic<[email protected]>
wrote:
Ah right, now I see.
Why not just register IRepo<>    and Linqrepo<,>    as open generics, and
have them closed over A and B on demand as needed?
On 05/03/2011 12:42 AM, Rob wrote:
That allows selection of multiple services for a single found type,
but in my scenario, the found type (the datacontext) isn't actually
the implementation type at all, it is merely the source for a list of
components to be registered (irepo<a>, linqrepo<a, ctx>), (irepo<b>,
linqrepo<b, ctx>), etc.
On Mar 4, 8:23 am, Krzysztof Koźmic<[email protected]>
wrote:
WithService.Select((a,b)=>      bla)
On 05/03/2011 12:05 AM, Rob wrote:
I think I must be missing it. FromAssemblyDescriptor and
BasedOnDescriptor don't have a Select method on them.  Plus, if Select
is anything like the LINQ Select, it's map and therefore 1 to 1, where
what I really need is SelectMany (1 to many mapping).
On Mar 3, 5:17 pm, Krzysztof Koźmic<[email protected]>
wrote:
There is, it's called Select
On 04/03/2011 8:33 AM, Rob wrote:
I probably should have provided this detail up front.
I have IRepository<TEntity>          which is implemented by
LinqRepository<TEntity, TDataContext>.
So, for each type T in the assembly that inherits from DataContext I
need to do:
      for each property of T whose type is Table<U>, register a component
for IRepository<U>          implemented by LinqRepository<U, T>
The fact that I have to type all this out probably means that this is
a special enough case not to be covered by the default API.  It would
be nice to have a general .SelectMany() hanging off the end of the
type finding stuff so I could do something like:
container.Register(
      AllTypes.FromThisAssembly()
       .BasedOn(....)
       .SelectMany(a single type =>          a set of Component registrations)
)
On Mar 3, 3:20 pm, José F. Romaniello<[email protected]>          wrote:
in the end you  want to register
IRepository<T>          pointing to Table<T>?
2011/3/3 Rob<[email protected]>
I'm using Windsor 2.5.3 and I'm trying to use the fluent registration
API to register a set of components per type found. What I'm trying to
achieve is roughly:
for every type
      in this assembly
      that inherits from X
      don't register X, but instead use X to determine a set of components
to register.
The concrete example is that I want to find every DataContext in my
assembly and rather than registering the DataContext itself, walk its
properties and for each one that returns a Table<T>, register my own
IRepository<T>          as a component.
I have a pretty strong suspicion that I'm just going to have to do
this myself, but I would love to reuse the assembly walking code that
Windsor clearly has.
--
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