seen lots of questions about it without an answer but how do you use DI in a class library using Castle Windsor? People online are saying it's a bad thing/ 'Smell' but how else do you avoid concrete implementations and write unit tests please? I have an example below using NUnit and NSubstitute.
Any help much appreciated.
Many thanks,
Feature code
public class PassengerService
{
private IPassengerRepository _passengerRepository;
public PassengerService(IPassengerRepository passengerRepository)
{
_passengerRepository = passengerRepository;
}
}
Unit test
public class PassengerServiceTests
{
private PassengerService _passengerService;
private IPassengerRepository _passengerRepository;
[SetUp]
public void Setup()
{
_passengerRepository = Substitute.For<IPassengerRepository>();
_passengerService = new PassengerService(_passengerRepository);
}
[Test]
public void Example_Test()
{
var p = _passenger.GetPassenger(Arg.Any<int>());
// Assert
_passengerRepository.Receive(1).Get(...);
}
}
Update
Class libraries don't have a Global.asax file as far as I'm aware so I'm not sure where to write the following Castle Windsor component registrations, i.e.
Registration
container.Register(Component.For<IPassengerRepository>().ImplementedBy<PassengerRepository>().LifestyleTransient());