我们有一个界面...
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());