RegisterType导致错误
本文关键字:错误 RegisterType | 更新日期: 2023-09-27 18:12:56
你好,我正试图建立一个测试项目,以便在使用Unity IoC容器和Moq时进行单元测试。
当我尝试在Unity中注册类型时,我似乎得到了一个错误。这是我的代码:
public static class SetupMockObjects
{
public static IProductRepository GetProductRepository() {
Mock<IProductRepository> productRepository = new Mock<IProductRepository>();
productRepository.Setup(m => m.Products).Returns(new List<Product> {
new Product { Name = "Football" , Price = 25 },
new Product { Name = "Surf board" , Price = 179 },
new Product { Name = "Running shoes" , Price = 95 }
});
return productRepository.Object;
}
}
public static void Initialise()
{
var container = BuildUnityContainer();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
}
private static IUnityContainer BuildUnityContainer()
{
var container = new UnityContainer();
container.RegisterType<IProductRepository , SetupMockObjects.GetProductRepository()>();
return container;
}
现在我在这里创建一个模拟对象,只是因为我不想创建一个数据访问层,所以我认为创建一个模拟对象会更容易。
问题是内置的BuildUnityContainer()方法,当我试图注册一个类型,我得到这个错误:
Error 1 Invalid expression term ','
Error 2 ; expected
Error 3 ; expected
Error 4 Invalid expression term ')'
Error 5 ) expected
我很确定我用正确的泛型参数调用RegisterType,这就是为什么我不明白为什么会抛出这些错误。我哪里出错了?
您正在尝试使用SetupMockObjects.GetProductRepository()
作为类型参数。这是行不通的——类型参数必须是类型的名称(或类型参数)。我怀疑你是想把它当作一个常规参数:
container.RegisterInstance<IProductRepository>(SetupMockObjects.GetProductRepository());
或者更容易读:
var repository = SetupMockObjects.GetProductRepository();
container.RegisterInstance<IProductRepository>(repository);
或者如果类型推断工作(我没有文档在我面前检查声明),您可以使用:
container.RegisterInstance(SetupMockObjects.GetProductRepository());
毕竟,方法的返回类型与要指定的类型参数相同。
请注意,我已经将调用从RegisterType
更改为RegisterInstance
,因为您只是试图将接口绑定到特定实例。