来自通用输入的 C# 代理通用参数
C# Proxy Generic Parameter From Generic Input
我正在编写一些测试,但我经常发现自己必须查找通用参数才能显式传递。
public class MyService : SecureService<RootEntity>
{
//Intentionally omitted does not provide information related to question
}
public DepedencyReplaceScope<IContextProvider> CreateMockScope<TRootEntity>
{
var mockCtx = Mock.Of<IContextProvider>(x => x.WriteContext<TRootEntity> == new FakeContext<TRootEntity>())
return new DependencyReplaceScope(mockCtx);
}
目前,当我为我的测试创建模拟时,我也进入了服务并找出它的根是要传递的。但是,如果我可以根据服务创建一个范围,那就更好了。
例如(伪代码)
public DepedencyReplaceScope<IContextProvider> CreateMockScopeFromService<TService>
where TService : SecureService<>
define TRootEntity : TService<()>
{
return CreateMockScope<TRootEntity>();
}
这行不通,因为我认为没有办法为通用定义代理。有没有办法只从 TService 创建这个范围(我不想直接使用反射来构建它,但我不介意使用带有最小起订量的 hack,因为它抽象了反射)
到目前为止我能想到的最好的事情是:
public static class MockScopeProvider
{
public static DepedencyReplaceScope<IContextProvider> CreateMockScopeFromService<U>(SecureService<U> dummy)
{
// your logic....
var mockCtx = Mock.Of<IContextProvider>(x => x.WriteContext<U>() == new FakeContext<U>());
return new DependencyReplaceScope(mockCtx);
}
}
这样的用法:
MockScopeProvider.CreateMockScopeFromService(default(MyService));
我正在编写一些测试,但我经常发现自己必须查找通用参数才能显式传递。
public class MyService : SecureService<RootEntity>
{
//Intentionally omitted does not provide information related to question
}
public DepedencyReplaceScope<IContextProvider> CreateMockScope<TRootEntity>
{
var mockCtx = Mock.Of<IContextProvider>(x => x.WriteContext<TRootEntity> == new FakeContext<TRootEntity>())
return new DependencyReplaceScope(mockCtx);
}
目前,当我为我的测试创建模拟时,我也进入了服务并找出它的根是要传递的。但是,如果我可以根据服务创建一个范围,那就更好了。
例如(伪代码)
public DepedencyReplaceScope<IContextProvider> CreateMockScopeFromService<TService>
where TService : SecureService<>
define TRootEntity : TService<()>
{
return CreateMockScope<TRootEntity>();
}
这行不通,因为我认为没有办法为通用定义代理。有没有办法只从 TService 创建这个范围(我不想直接使用反射来构建它,但我不介意使用带有最小起订量的 hack,因为它抽象了反射)
到目前为止我能想到的最好的事情是:
public static class MockScopeProvider
{
public static DepedencyReplaceScope<IContextProvider> CreateMockScopeFromService<U>(SecureService<U> dummy)
{
// your logic....
var mockCtx = Mock.Of<IContextProvider>(x => x.WriteContext<U>() == new FakeContext<U>());
return new DependencyReplaceScope(mockCtx);
}
}
这样的用法:
MockScopeProvider.CreateMockScopeFromService(default(MyService));