Structuremap打开通用的命名情况
-
27-09-2019 - |
题
我必须做到以下几点:
var someType = ObjectFactory.GetNamedInstance("myNamedInstance");
在someType可以是任何实施ICommand.
因此我已注册的一些:
For(typeof(ICommand<>)).Use(typeof(Command1)).Named("myNamedInstance1");
For(typeof(ICommand<>)).Use(typeof(Command2)).Named("myNamedInstance2");
有没有办法做到这一点,在StructureMap,因为GetNamedInstance需要的类型参数我don3t知道,直到运行时?
解决方案
(为此,我假设 你的 创建 ICommand<T>
)
这实际上没有任何意义...认为该行:
//where aString is either myNamedInstance1 or myNamedInstance2
var someType = ObjectFactory.GetNamedInstance(aString);
现在假设你是不是要用 var
, ,而不是实际类型。什么你会把那里能编写?那是什么类型可以someType可能比其他 object
?
还有,记得 ICommand<string>
和 ICommand<int>
均构成的类型 ICommand<T>
, 但不无关-他们有没有共同的基类型不 object
.
如果你不的种类,直到运行时,泛型是不会帮助一堆-而不是让你 ICommand<T>
继承一些共同的接口状 ICommandBase
-有方法,你实际需要。
但是,如果你只是不知道类型 在这方, 你可以把未知的"向上"在编制通过使该方法包含通用:
public void Execute<T>( string commandName)
{
var someType = ObjectFactory.GetNamedInstance<ICommand<T>>(commandName);
someType.Execute();
}
现在叫的执行需要的类型参数...但是再一次你可以推动的时候了。注意到最终你会需要这类参数。
不隶属于 StackOverflow