要約:InjectionFactoryが型マッピングのために実行されていないようです。私はなぜ、どのように問題を解決するかを知りたい。まずUnity InjectionFactoryが実行されない
、私はこれは、いくつかの工夫の後
The current type, NLog.ILogger, is an interface and cannot be constructed. Are you missing a type mapping?
の結果、私がすることを決定したインタフェース
Container.RegisterType<ILogger>(new InjectionFactory((c, t, n) => {
return LogManager.GetLogger(n);
}));
を登録し、
ServiceLocator.GetInstance<ILogger>("Operation Manager");
サービスロケータを使用して解決しようとしました別のアプローチを試して、具体的なタイプを使用してサービスを登録してください
Container.RegisterType<Logger>(new InjectionFactory((c, t, n) => {
return LogManager.GetLogger(n);
}));
そしてこれは、次のエラーが発生し
public OperationService([Dependency("Operation Service")]Logger logger)
に解決方法を変更:
The type Logger does not have an accessible constructor.
機能はI」場合、私は、この動作のために考えることができる唯一の理由は、 InjectionFactoryを介して渡されたオブジェクトは、実際にオブジェクトを解決するために呼び出されません。
依存関係を名前で解決しようとしています。つまり、「操作マネージャー」です。しかし、登録するときには、この名前を使用しないでください。 –
@JoeBlow私はインスタンスを作成するためのカスタムメソッドを提供することによって、コンテナの "解決"メソッドに与えられた名前に基づいてオブジェクトを解決しようとしています。 LogManager.GetLogger(name)は返されるロガーの名前をとります。私は解決名をGetLoggerメソッドに渡してインスタンスを作成します。 – Benjamin
万が一、Microsoftのユニティについて話していますか?つまり、あなたの質問に使用したタグのUnity3Dゲームエンジンではありませんか? – Bart