我有一个界面
IFinancialMarketRepository<IFinancialMarket>
而FinancialMarketRepository
是
FinancialMarketRepository<IFinancialMarket>
当我通过StructureMap注册代码
时 x.For(typeof(IFinancialMarketRepository<>)).Use(typeof(FinancialMarketRepository<>));
我收到了一条消息
&#34;没有注册默认实例,无法自动确定类型
'IFinancialMarketRepository<IFinancialMarket>'
没有为
指定配置IFinancialMarketRepository<IFinancialMarket>
我也尝试使用代码:
ObjectFactory.Container.Configure(expression => expression.Scan(scanner =>
{
scanner.TheCallingAssembly();
scanner.AddAllTypesOf(typeof(IFinancialMarketRepository<>));
scanner.WithDefaultConventions();
}));
但错误信息仍然存在。
更新
以下是我定义x:
的代码 ObjectFactory.Initialize(x =>{
x.For(typeof(IFinancialMarketRepository<>)).Use(typeof(FinancialMarketRepository<>));
});
答案 0 :(得分:0)
You effectively have this code:
public class Entity { }
public interface IFinancialMarket { }
public interface IFinancialMarketRepository<T> { }
public class FinancialMarketRepository<TEntity> : IFinancialMarketRepository<TEntity>
where TEntity : Entity, IFinancialMarket { }
And, with StructureMap, you're trying to create an instance of IFinancialMarketRepository<IFinancialMarket>
- which StructureMap has been told to instantiate FinancialMarketRepository<IFinancialMarket>
.
Now, if I try it with this code:
var fmr = new FinancialMarketRepository<IFinancialMarket>();
...the compiler tells me:
The type 'IFinancialMarket' cannot be used as type parameter 'TEntity' in the generic type or method 'FinancialMarketRepository'. There is no implicit reference conversion from 'IFinancialMarket' to 'Entity'.
You're basically trying to create a type that doesn't conform to the generic constraint. That's why it is failing.