Hi
Firstly I wanted to report my thoughts in http://issues.castleproject.org/
as a bug description, but the page doesn't work - it only redirects to
github 'castle-youtrack-export' page, so need to discuss the issue here.
Scenario:
I use some different types of, let say, 'ViewModels', where all of
ViewModel-types use some services but with different implementations. The
natural way of implement this is register all available services
implementations and resolve them per ViewModel instance
I believe that the unit test below describes my idea and expectation.
Please run the test - it fails.
[TestFixture]
public sealed class BoundedLifestyleTests
{
class ViewModel
{
public IService[] Services { get; set; }
}
public interface IService { }
class NeutralStrategy : IService { }
class SpecializedStrategy : IService { }
/// <summary>
/// I have some IService implementations, where the are either are
neutral (could be used in any context)
/// or are specialized (should be resolved only in ViewModel).
/// I would like to implement that requirement with
LifestyleBoundTo which looks promising.
/// </summary>
[Test]
public void Test()
{
var container = new WindsorContainer();
container.Kernel.Resolver.AddSubResolver(new
CollectionResolver(container.Kernel, true));
container.Register(
Component.For<IService>().ImplementedBy<NeutralStrategy>(),
Component.For<ViewModel>(),
Component.For<IService>().ImplementedBy<SpecializedStrategy>().LifestyleBoundTo<ViewModel>());
// ViewModel has neutral and specialized strategies resolved.
var viewModel = container.Resolve<ViewModel>();
Assert.That(viewModel.Services.Select(o => o.GetType()),
Is.EquivalentTo(new[] { typeof(NeutralStrategy),
typeof(SpecializedStrategy) }));
// Outside of a graph bound to ViewModel, we still should be
able to resolve neutral strategy.
var neutralStrategies = container.ResolveAll<IService>();
Assert.That(neutralStrategies.Select(o => o.GetType()),
Is.EquivalentTo(new[] { typeof(NeutralStrategy) }));
}
}
Regards
Slawek
--
You received this message because you are subscribed to the Google Groups
"Castle Project Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/castle-project-users.
For more options, visit https://groups.google.com/d/optout.