在没有答案的情况下看到了很多关于它的问题,但是如何使用Castle Windsor在类库中使用DI?在线人士称这是一件坏事/'嗅觉'但是你怎么避免具体实现并编写单元测试呢?我在下面有一个使用NUnit和NSubstitute的例子。
任何帮助都非常感激。
非常感谢,
功能代码
public class PassengerService
{
private IPassengerRepository _passengerRepository;
public PassengerService(IPassengerRepository passengerRepository)
{
_passengerRepository = passengerRepository;
}
}
单元测试
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(...);
}
}
更新
我知道类库没有Global.asax文件所以我不确定在哪里写下以下Castle Windsor组件注册,即
注册
container.Register(Component.For<IPassengerRepository>().ImplementedBy<PassengerRepository>().LifestyleTransient());