问题标签 [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.
c#-4.0 - StructureMap 实例工厂方法
我正在尝试注册一个工厂方法来创建开放泛型类型的实例MongoCollection<>
。但是,当我GetInstance
看起来它使用的是 MongoCollection 的构造函数而不是工厂方法时。
然后我做
当我运行该GetInstance
行时,它永远不会在工厂方法中遇到断点,但它会抛出一个StructureMapException
说法“没有为 PluginFamily MongoDb.Driver.MongoServerSettings 定义默认实例”。有一个构造函数MongoCollection
需要 a MongoServerSettings
,但我不希望结构映射使用该构造函数,我希望它使用我的工厂方法。
任何想法为什么它不使用工厂方法?这是一个错误吗?
c# - AutoFixture:配置一个开放的泛型样本生成器
我有一个使用开放泛型的对象模型(是的,是的,现在我有两个问题;这就是我在这里的原因:) :-
我正在尝试让 AutoFixture 生成D
上述匿名实例。然而,就其本身而言,AutoFixture 没有内置的构建策略IOGF<>
,因此我们观察到:
基本信息是:
Ploeh.AutoFixture.ObjectCreationException : AutoFixture 无法从 IOGF`1[C] 创建实例,很可能是因为它没有公共构造函数,是抽象或非公共类型。
我很高兴为它提供一个具体的实现:
以及相关的绑定:
我如何(或者我什至应该以这种方式看待问题??)使以下测试通过?
(在 codeplex 网站上有关于此的讨论和问题 - 我只需要快速了解一下,如果这只是一个坏主意和/或我错过了一些东西,我愿意删除它)
编辑 2:(另请参阅对 Mark 的回答的评论)这里的(诚然人为的)上下文是对大型“几乎完整的系统”系统被测对象图的验收测试,而不是小型(受控/易于 grok :) 对或三元组单元或集成测试场景中的类。正如自我问题的括号陈述中提到的那样,我并不完全相信这种类型的测试甚至有意义。
c# - autofac 打开通用 iRepositoryxml配置
我想使用 autofac 和存储库模式 (iRepository),但似乎看不到使用 XML 配置配置 autofac 的方法。
正如其他人遇到这个问题?
ninject - 如何使用 Ninject 约定扩展将泛型类型与继承绑定
如何使用Ninject 约定InitializerForXXX
将(非泛型实现)绑定到IInitializer<XXX>
(泛型接口),以便请求解析名称以InitializerFor开头并以类似结尾的非泛型实现:IInitializer<T>
typeof(T).Name
其中没有非抽象类直接实现IInitializer<T>
,并且一些实现继承自其他实现:
InitializerForShadeOfBlue
继承自InitializerForBlue
InitializerForBlue
从抽象继承Initializer<Blue>
- abstract
Initializer<T>
直接实现IInitializer<T>
我希望我可以将 a.EndsWith(typeof(T).Name)
用于我可以使用的给定约定,因为在ShadeOfxxx静脉IInitializer<T>
中实际上有数百个初始化程序。如果我必须映射所有这些,我最好找到一种在运行时通过反射解决的方法。
鉴于以下情况:
更新:使用自定义绑定生成器进行绑定(请参阅下面的答案以了解实现)
主要方法
初始化工厂
初始化器
内容模型
mapping - Structuremap WhatDoIHave 说我有。ObjectFactory 说我没有
天哪,路易丝,我正在尝试用 SM 重新安装一个瘟疫缠身的遗留应用程序,但遇到了各种奇怪的事情。所以我为所有奇怪的问题道歉。
所以我有这个代码
我有什么
验证器收到这样的错误
这是完整的错误,没有内部错误。也许我只是忽略了一些语法错误。谢谢你的帮助,雷夫
ninject-extensions - 使用 Ninject 自定义实例提供者绑定成功,使用工厂方法参数解析
我一直在研究一个类似问题的公认答案,我认为具体工厂返回一个实现,该实现基于工厂方法上的字符串参数匹配具体实现上的命名绑定。
当工厂是抽象工厂并且我希望使用基于 Ninject 约定的绑定时,我正在努力让一个稍微复杂的示例正常工作。考虑以下测试:
这是我尝试使用火把和刀具玩杂耍的地方,因为我曾经在互联网上看到过:
当我尝试分配bicycleBuilderFactory
此错误时,我被刺伤并着火:
是否可以使用方法和自定义提供程序进行绑定,使用工厂方法参数( )以及泛型类型参数( )来解析类型? ToFactory()
"Germany"
IVehicleBiulder<BlueBicycle>, BlueBicycle
这是测试的其余代码,尽可能紧凑和可读。
VehicleBuilder 实现
车辆实施:
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
类,因为我明确地对它进行了自我绑定。你能看出我做错了什么吗?
c# - 如何在 Autofac 中注册许多开放泛型
我是Autofac的新手(不是DI)。情况如下:
我有这些接口:
在我的解决方案中有很多实现它们:
等等。我目前正在像这样注册它们:
如您所见,我有许多相同的注册。在SimpleInjector
(我之前使用的)中,我可以通过一行注册所有这些:
是否可以在Autofac中做这些事情?
autofac - Autofac:开放泛型和基本接口
给定以下接口和类,Autofac 中有没有办法
Provider<T>
为所有具有 a 的类ProviderAttribute
注册aT
作为此类的类型(考虑注册开放泛型并使用 Autofac 解析它们MakeGenericType()
)- 将这些注册的提供者作为鼓声
IEnumerable<IProviderBase>
注入到其他类的构造函数中
概述:
.net - 如何注册通用对象工厂?
我有以下两个课程:
构造函数internal
和第二个类存在的原因是我想强制执行更高度可维护的KeyedEntity.Create(x, y)
语法而不是new KeyedEntity<T>{ Key = x, Entity = y }
. (请注意,类型是使用前一种语法推断的。)
我想告诉 AutoFixture 如何创建KeyedEntity
. 但是,该Register
方法似乎只允许注册单个类型而不是开放的泛型类型。
如何注册KeyedEntity.Create<TEntity>
为创建功能KeyedEntity<TEntity>
?