我有一个对象:
public class TestEvent : IEvent
{
private string _id;
public TestEvent()
{
}
public TestEvent(string eventId)
{
_id = eventId;
}
}
我有一个 StructureMap 注册表:
public class TheRegistry : Registry
{
public TheRegistry()
{
Scan(_ =>
{
_.TheCallingAssembly();
_.AddAllTypesOf<IEvent>().NameBy(t => t.Name.ToUpper());
});
}
}
我正在尝试使用 StructureMap 容器获取 IEvent 的命名实例并传入“eventId”的构造函数参数:
var id = "TESTEVENT";
var args = new ExplicitArguments();
args.SetArg("eventId", id);
var eventInstance = _container.GetInstance<IEvent>(args, id);
我认为文档建议它应该可以工作,但是我收到了 ArgumentNullException:
{"正在尝试查找 MyProject.IEvent 类型的实例,MyProject,版本=1.0.0.0,文化=中性,publicKeyToken=null\r\n参数名称:实例"}
如果我删除第二个构造函数,所有代码都可以正常工作,并且只获取命名实例。
更新:
在 Kirk 的调查之后,我已经能够通过创建一个简单的对象来保存任何所需的参数来解决这个“问题”。现在可以了。
public class EventArguments
{
public string EventId { get; set; }
}
...
var eventName = Context.Parameters.EventTypeName.ToString().ToUpper();
var args = new ExplicitArguments();
args.SetArg("args", new EventArguments { EventId = eventName });
var eventInstance = _container.GetInstance<IEvent>(args, eventName);