代码之家  ›  专栏  ›  技术社区  ›  Jake Stevenson

对Windsor使用Moq-Moq.Mock[IFoo]类型的对象不能转换为IFoo

  •  9
  • Jake Stevenson  · 技术社区  · 16 年前

    _container.AddComponent("AutoBill", 
      typeof (AutoBillService), typeof (AutoBillService));
    
    var mockUserRepository = new Mock<IUserRepository>();
    var testUser = new User()
       {
         FirstName = "TestFirst",
         LastName = "TestLast", 
         UID=1
       };
    mockUserRepository.Setup(repo => repo.GetUser(testUser.UID))
       .Returns(testUser);
    
    _container.Kernel.AddComponentInstance("UserRepository", 
       typeof(IUserRepository), mockUserRepository);
    
    var service = _container.Resolve<AutoBillService>(); //FAIL
    

    这样做给了我一个例外:

    有人能看出我做错了什么吗?

    2 回复  |  直到 16 年前
        1
  •  12
  •   Mark Seemann    16 年前

    你应该通过 mockUserRepository.Object mockUserRepository .

    如果您使用强类型API,这将更加明显:

    _container.Register(Component
        .For<IUserRepository>()
        .Instance(mockUserRepository.Object));
    

    这是因为Object属性实现了IUserRepository。

        2
  •  1
  •   Artem A    15 年前

    我对温莎城堡也有同样的问题。 一个Dinamic初始化方法:

    container.Register(Component.For<IUserRepository>()
             .Instance(mockUserRepository.Object));
    

    直到我从caslteRepository.config文件中删除预初始化的存储库(如您的IUserRepository)并将容器从存储库中保留为“空”时,它才起作用。