我有以下课程:
public interface IRenderer<T>
{
string Render(T obj);
}
public class Generic<T> { }
public class SampleGenericRenderer<T> : IRenderer<Generic<T>>
{
public string Render(Generic<T> obj)
{
throw new NotImplementedException();
}
}
我希望能够调用 StructureMap
ObjectFactory.GetInstance<IRenderer<Generic<string>>>();
并接收SampleGenericRenderer<string>
。
我目前正在使用以下注册并在调用 GetInstance 时收到此错误。“无法转换类型的对象:
ConsoleApplication1.SampleGenericRenderer'1[ConsoleApplication1.Generic'1[System.String]]' 输入'ConsoleApplication1.IRenderer'1[ConsoleApplication1.Generic'1[System.String]]。
public class CoreRegistry : Registry
{
public CoreRegistry()
{
Scan(assemblyScanner =>
{
assemblyScanner
.AssemblyContainingType(typeof(IRenderer<>));
assemblyScanner.AddAllTypesOf(typeof(IRenderer<>));
assemblyScanner
.ConnectImplementationsToTypesClosing(
typeof(IRenderer<>));
});
}
}
有没有办法配置 StructureMap 以便它创建SampleGenericRenderer<string>
而不是SampleGenericRenderer<Generic<string>>
?
更新:我最终自己为这部分依赖项进行了类型构造。因为它们将上下文绑定与许多不受支持的泛型绑定结合在一起,所以这被证明是最干净的解决方案。