我必须做到以下几点:

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

现在叫的执行需要的类型参数...但是再一次你可以推动的时候了。注意到最终你会需要这类参数。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top