C# RegisterType导致错误

C# RegisterType导致错误,c#,unity-container,C#,Unity Container,嗨,我正在尝试建立一个测试项目,以便在使用Unity IoC容器和Moq时进行一些单元测试 当我尝试在Unity中注册类型时,似乎遇到了一个错误。这是我的代码: public static class SetupMockObjects { public static IProductRepository GetProductRepository() { Mock<IProductRepository> productRepository = new Mock&

嗨,我正在尝试建立一个测试项目,以便在使用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;
}

我很确定我使用正确的泛型参数调用RegisterType,这就是为什么我不理解为什么会抛出这些错误。我在哪里犯了错误?

您试图使用
SetupMockObjects.GetProductRepository()
作为类型参数。这是行不通的-类型参数必须是类型(或类型参数)的名称。我猜你是想把它当作一个常规的论据:

container.RegisterInstance<IProductRepository>(SetupMockObjects.GetProductRepository());
毕竟,方法的返回类型与要指定的类型参数相同

请注意,我已将调用从
RegisterType
更改为
RegisterInstance
,因为您只是尝试将接口绑定到特定实例

container.RegisterInstance<IProductRepository>(SetupMockObjects.GetProductRepository());
var repository = SetupMockObjects.GetProductRepository();
container.RegisterInstance<IProductRepository>(repository);
container.RegisterInstance(SetupMockObjects.GetProductRepository());