课堂图书馆中的DI

时间:2016-01-08 09:22:20

标签: c# dependency-injection

在没有答案的情况下看到了很多关于它的问题,但是如何使用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());

0 个答案:

没有答案