私はオブジェクトを持っています:
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、Version = 1.0.0.0、Culture = neutral、publicKeyToken = null \ r \ nパラメータ名:インスタンスのインスタンスを検索しようとしています"}
2番目のコンストラクターを削除し、名前付きインスタンスを取得するだけで、すべてのコードが正しく機能します。
アップデート:
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);