如何使用T注册Interface <t>是Structuremap中的接口

时间:2016-04-07 04:37:01

标签: c# asp.net generics structuremap

我有一个界面

    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<>));
});

1 个答案:

答案 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.