one option is to implement an ISubDependencyResolver. within the
resolver parse the sport from the current context, then resolve the
repository.
something like
class ProductRepositoryResolver : ISubDependencyResolver
{
public (ProductRepositoryResolver(IKernel kernel)
{
this.kernel = kernel;
}
public object Resolve(...)
{
var sport = parse_sport_from(HttpContext.Current);
return kernel.Resolve<IProductsRepository>(sport);
}
public bool CanResolve(...)
{
return dependency.TargetType == typeof(IProductsRepository);
}
}
register the subdedepency resolver , then you're components. I would
also recommend the fluent API to register the components, rather than
XML.
On Jun 2, 11:09 am, [email protected] wrote:
> I am just getting started with Castle Windsor so please excude me if
> this has been covered before. I've tried reading the online
> documentation, old forums posts and email list but I haven't found
> exactly what I am looking for.
>
> I am trying to hook Castle into a new Asp.net MVC project. Below is an
> example of what I have working:
>
> <component id="ProdsRepository"
> service="DomainModel.Abstract.IProductsRepository,
> DomainModel"
> type="DomainModel.Concrete.FakeProductsRepository,
> DomainModel"
> lifestyle="PerWebRequest">
> <parameters>
> <sport>hockey</sport>
> </parameters>
> </component>
>
> This resolves fine and the test page loads as expected. But what I
> really need to be able to do is to have the Asp.net MVC routing engine
> supply the "sport" parameter dynamically based upon the incoming URL
> (instead of having the parameter being static and listed in the
> web.config).
>
> Now, to generate a parameter from MVC routing engine is simple to do
> with the following code:
> routes.MapRoute(null, "Products/{sport}",
> new { controller = "Products", action =
> "List"});
>
> But if I change the component in the web.config to have an empty value
> (assuming that the incoming parameter would be matched up to the
> component parameter), like listed below...
> <parameters>
> <sport></sport>
> </parameters>
>
> the page bombs with the following message:
> Could not resolve non-optional dependency for
> 'ProdsRepository' (DomainModel.Concrete.FakeProductsRepository).
> Parameter 'sport' type 'System.String'
>
> So how can I change the sport parameter to be dynamic and supplied by
> the MVC routing engine during runtime?
>
> Thanks a ton for everyone's time,
> Todd Banister
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---