我们有一个界面...

public interface IService<T> where T : class
{
}


...我需要作为组件测试项目的一部分进行模拟,并向Castle Windsor容器注册。

我只关心该接口具有一个在容器中注册的实现,以满足项目中的依赖关系。

我发现无法通用模拟这样的接口(Mock<IService<>>Mock<T, IService<T>>?),所以我创建了一个哑类...

public class FakeT
{
}


...并这样注册服务机构...

container.Register(Component.For(typeof(IService<>), typeof(Mock<IService<FakeT>>)).LifestyleTransient());


...至少可以编译,但是当我运行测试时,Castle Windsor试图解决此依赖关系时会抛出以下异常:


  [My.Namespace.IService`1 [My.Tests.FakeT]]不是
  GenericTypeDefinition。 MakeGenericType只能在类型上调用
  Type.IsGenericTypeDefinition为真。”


我显然弄错了,所以希望您能帮忙:)

最佳答案

创建一个实现您的接口的类:

public class SomeClass : IService<FakeT>
{
}


然后注册该类和接口:

container.Register(Component.For<IService<FakeT>>().
.ImplementedBy<SomeClass>()
.LifestyleTransient());

10-07 12:23