问题标签 [open-generics]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
966 浏览

c#-4.0 - StructureMap 实例工厂方法

我正在尝试注册一个工厂方法来创建开放泛型类型的实例MongoCollection<>。但是,当我GetInstance看起来它使用的是 MongoCollection 的构造函数而不是工厂方法时。

然后我做

当我运行该GetInstance行时,它永远不会在工厂方法中遇到断点,但它会抛出一个StructureMapException说法“没有为 PluginFamily MongoDb.Driver.MongoServerSettings 定义默认实例”。有一个构造函数MongoCollection需要 a MongoServerSettings,但我不希望结构映射使用该构造函数,我希望它使用我的工厂方法。

任何想法为什么它不使用工厂方法?这是一个错误吗?

0 投票
2 回答
3028 浏览

c# - AutoFixture:配置一个开放的泛型样本生成器

我有一个使用开放泛型的对象模型(是的,是的,现在我有两个问题;这就是我在这里的原因:) :-

我正在尝试让 AutoFixture 生成D上述匿名实例。然而,就其本身而言,AutoFixture 没有内置的构建策略IOGF<>,因此我们观察到:

基本信息是:

Ploeh.AutoFixture.ObjectCreationException : AutoFixture 无法从 IOGF`1[C] 创建实例,很可能是因为它没有公共构造函数,是抽象或非公共类型。

我很高兴为它提供一个具体的实现:

以及相关的绑定:

我如何(或者我什至应该以这种方式看待问题??)使以下测试通过?

(在 codeplex 网站上有关于此的讨论和问题 - 我只需要快速了解一下,如果这只是一个坏主意和/或我错过了一些东西,我愿意删除它)

编辑 2:(另请参阅对 Mark 的回答的评论)这里的(诚然人为的)上下文是对大型“几乎完整的系统”系统被测对象图的验收测试,而不是小型(受控/易于 grok :) 对或三元组单元或集成测试场景中的类。正如自我问题的括号陈述中提到的那样,我并不完全相信这种类型的测试甚至有意义。

0 投票
1 回答
635 浏览

c# - autofac 打开通用 iRepositoryxml配置

我想使用 autofac 和存储库模式 (iRepository),但似乎看不到使用 XML 配置配置 autofac 的方法。

正如其他人遇到这个问题?

0 投票
2 回答
3082 浏览

ninject - 如何使用 Ninject 约定扩展将泛型类型与继承绑定

如何使用Ninject 约定InitializerForXXX将(非泛型实现)绑定到IInitializer<XXX>(泛型接口),以便请求解析名称以InitializerFor开头并以类似结尾的非泛型实现:IInitializer<T>typeof(T).Name

其中没有非抽象类直接实现IInitializer<T>,并且一些实现继承自其他实现:

  • InitializerForShadeOfBlue继承自InitializerForBlue
  • InitializerForBlue从抽象继承Initializer<Blue>
  • abstractInitializer<T>直接实现IInitializer<T>

我希望我可以将 a.EndsWith(typeof(T).Name)用于我可以使用的给定约定,因为在ShadeOfxxx静脉IInitializer<T>中实际上有数百个初始化程序。如果我必须映射所有这些,我最好找到一种在运行时通过反射解决的方法。

鉴于以下情况:

更新:使用自定义绑定生成器进行绑定(请参阅下面的答案以了解实现)

主要方法

初始化工厂

初始化器

内容模型

0 投票
1 回答
680 浏览

mapping - Structuremap WhatDoIHave 说我有。ObjectFactory 说我没有

天哪,路易丝,我正在尝试用 SM 重新安装一个瘟疫缠身的遗留应用程序,但遇到了各种奇怪的事情。所以我为所有奇怪的问题道歉。

所以我有这个代码

我有什么

验证器收到这样的错误

这是完整的错误,没有内部错误。也许我只是忽略了一些语法错误。谢谢你的帮助,雷夫

0 投票
1 回答
1250 浏览

ninject-extensions - 使用 Ninject 自定义实例提供者绑定成功,使用工厂方法参数解析

我一直在研究一个类似问题的公认答案,我认为具体工厂返回一个实现,该实现基于工厂方法上的字符串参数匹配具体实现上的命名绑定。

当工厂是抽象工厂并且我希望使用基于 Ninject 约定的绑定时,我正在努力让一个稍微复杂的示例正常工作。考虑以下测试:

这是我尝试使用火把和刀具玩杂耍的地方,因为我曾经在互联网上看到过:

当我尝试分配bicycleBuilderFactory此错误时,我被刺伤并着火:

是否可以使用方法和自定义提供程序进行绑定,使用工厂方法参数( )以及泛型类型参数( )来解析类型? ToFactory() "Germany"IVehicleBiulder<BlueBicycle>, BlueBicycle

这是测试的其余代码,尽可能紧凑和可读。

VehicleBuilder 实现

车辆实施:

0 投票
1 回答
1846 浏览

ninject - 是否可以将 Ninject Factory Extensions 的 ToFactory 方法与开放泛型一起使用?

我正在构建之前回答的问题,其中ICar使用Ninject Conventions Extensions和自定义IBindingGenerator绑定实现,并且使用Ninject Factory Extensions 的方法和自定义实例提供程序ICarFactory绑定接口。 ToFactory()

我正在尝试重构,以便我可以绑定和使用 a IVehicleFactory<T>,其中T被限制为ICar,而不是之前的ICarFactory. 这样,我可以在泛型类型参数中指定我想要的车辆,而不是在工厂的CreateCar()方法中传入车辆类型的名称。

是否可以使用该ToFactory()技术绑定开放的通用接口?

我有一种感觉,我在吠叫错误的树,但是当我通过它的名称指定一个类型时,将类型本身指定为泛型类型参数ICar似乎是自然的演变......ICar

这是当前失败的测试:

InvalidCastException抛出:

和工厂界面:

还有自定义实例提供程序,我什至无法让调试器停止其断点,所以我真的不知道那里发生了什么:

编辑 1 - 更改 IVehicleFactory 签名和自定义实例提供程序

这是我将IVehicleFactory签名更改为使用通用Create<T>()方法,并显式绑定Mercedes到自身。

以及返回第一个泛型类型参数名称的新自定义实例提供程序:

这是新的测试,仍然没有通过:

}

ANinject.ActivationException被抛出:

我不知道为什么它找不到Mercedes类,因为我明确地对它进行了自我绑定。你能看出我做错了什么吗?

0 投票
2 回答
12766 浏览

c# - 如何在 Autofac 中注册许多开放泛型

我是Autofac的新手(不是DI)。情况如下:

我有这些接口:

在我的解决方案中有很多实现它们:

等等。我目前正在像这样注册它们:

如您所见,我有许多相同的注册。在SimpleInjector(我之前使用的)中,我可以通过一行注册所有这些:

是否可以在Autofac中做这些事情?

0 投票
1 回答
172 浏览

autofac - Autofac:开放泛型和基本接口

给定以下接口和类,Autofac 中有没有办法

  • Provider<T>为所有具有 a 的类ProviderAttribute注册aT作为此类的类型(考虑注册开放泛型并使用 Autofac 解析它们MakeGenericType()
  • 将这些注册的提供者作为鼓声IEnumerable<IProviderBase>注入到其他类的构造函数中

概述:

0 投票
2 回答
819 浏览

.net - 如何注册通用对象工厂?

我有以下两个课程:

构造函数internal和第二个类存在的原因是我想强制执行更高度可维护的KeyedEntity.Create(x, y)语法而不是new KeyedEntity<T>{ Key = x, Entity = y }. (请注意,类型是使用前一种语法推断的。)

我想告诉 AutoFixture 如何创建KeyedEntity. 但是,该Register方法似乎只允许注册单个类型而不是开放的泛型类型。

如何注册KeyedEntity.Create<TEntity>为创建功能KeyedEntity<TEntity>