Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何注册接口<;T>;with T是Structuremap中的一个接口_C#_Asp.net_Generics_Structuremap - Fatal编程技术网

C# 如何注册接口<;T>;with T是Structuremap中的一个接口

C# 如何注册接口<;T>;with T是Structuremap中的一个接口,c#,asp.net,generics,structuremap,C#,Asp.net,Generics,Structuremap,我有一个接口 IFinancialMarketRepository<IFinancialMarket> 当我用代码注册StructureMap时 x.For(typeof(IFinancialMarketRepository<>)).Use(typeof(FinancialMarketRepository<>)); x.For(typeof(IFinancialMarketRepository))。使用(typeof(FinancialM

我有一个接口

    IFinancialMarketRepository<IFinancialMarket> 
当我用代码注册StructureMap时

    x.For(typeof(IFinancialMarketRepository<>)).Use(typeof(FinancialMarketRepository<>));
x.For(typeof(IFinancialMarketRepository))。使用(typeof(FinancialMarketRepository));
我有个口信

“未注册任何默认实例,无法自动确定类型
'IFinancialMarketRepository'

没有为
IFinancialMarketRepository

我还尝试使用以下代码:

    ObjectFactory.Container.Configure(expression => expression.Scan(scanner =>
    {
        scanner.TheCallingAssembly();
        scanner.AddAllTypesOf(typeof(IFinancialMarketRepository<>));
        scanner.WithDefaultConventions();                  
    }));
ObjectFactory.Container.Configure(表达式=>expression.Scan(扫描器=>
{
扫描器。装夹总成();
scanner.AddAllTypesOf(typeof(IFinancialMarketRepository));
scanner.WithDefaultConventions();
}));
但是错误消息仍然存在

更新

下面是我定义x的代码:

 ObjectFactory.Initialize(x =>{
   x.For(typeof(IFinancialMarketRepository<>)).Use(typeof(FinancialMarketRepository<>));
});
ObjectFactory.Initialize(x=>{
x、 用于(类型of(IFinancialMarketRepository))。使用(类型of(FinancialMarketRepository));
});

您实际上拥有以下代码:

public class Entity { }

public interface IFinancialMarket { }

public interface IFinancialMarketRepository<T> { }

public class FinancialMarketRepository<TEntity> : IFinancialMarketRepository<TEntity>
    where TEntity : Entity, IFinancialMarket { }
var fmr = new FinancialMarketRepository<IFinancialMarket>();
公共类实体{}
金融市场公共界面{}
公共接口IFinancialMarketRepository{}
公共类FinancialMarketRepository:IFinancialMarketRepository
其中潜在性:实体,金融市场{}
而且,使用StructureMap,您正试图创建
IFinancialMarketRepository
的一个实例-该StructureMap已被告知实例化
FinancialMarketRepository

现在,如果我尝试使用以下代码:

public class Entity { }

public interface IFinancialMarket { }

public interface IFinancialMarketRepository<T> { }

public class FinancialMarketRepository<TEntity> : IFinancialMarketRepository<TEntity>
    where TEntity : Entity, IFinancialMarket { }
var fmr = new FinancialMarketRepository<IFinancialMarket>();
var fmr=new FinancialMarketRepository();
…编译器告诉我:

类型“IFinancialMarket”不能用作泛型类型或方法“FinancialMarketPository”中的类型参数“TEntity”。没有从“IFinancialMarket”到“Entity”的隐式引用转换


你基本上是在尝试创建一个不符合泛型约束的类型。这就是它失败的原因。

如果没有使用StructureMap,我猜这是因为
FinancialMarketPository
不是一个可以创建的对象。请进一步解释,我不理解你的想法。你不能编写代码
var x=新的FinancialMarketPository()
。似乎
。使用(…)
类型应该是可创建的。我可能错了,但这似乎是一个公平的猜测。你认为你可以提供声明
x
的代码吗?那么我可以玩一下代码。我在测试代码中添加了StructureMap,但我在其中任何地方都找不到
ObjectFactory
类。你能提供我需要的所有代码吗需要什么?