私は次のことをセットアップしました:
マーカー インターフェイス IFormatter、ジェネリック インターフェイス ITypedFormatter、基本クラス FormatterBase、およびその FormatterBase に対する一連の実装。
次のようになります。
public interface IFormatter{}
public interface ITypedFormatter<T> : IFormatter {...}
public abstract class FormatterBase<T> : ITypedFormatter<T> {...}
public class SomeFormatter<SomeClass> : FormatterBase<SomeClass> { ... }
それらを次のようにautofacに登録します:
builder.RegisterType<SomeFormatter>().Keyed<IFormatter>(typeof(SomeClass));
次に、それを別のクラスで使用して、IIndex を介してそれらを収集し、メソッドで使用します。
public class SomeService
{
public SomeService(IIndex<Type, IFormatter> formatterFactory){...}
public T Format<T>(T entity)
{
var formatter = formatterFactory[typeof (T)];
var typedFormatter = formatter as ITypedFormatter<T>;
if(typedFormatter == null)
return default(T);
return typedFormatter.Format(entity);
}
}
コントローラー経由の配線なども問題なく動作しています。私はすべての登録とすべてを見ることができます。しかし、メソッドの最初の行に到達した瞬間から、EntryPointNotFoundException が発生します。
最も奇妙なのは、メソッドの最初の行にブレークポイントを設定し、ビジュアルスタジオのウォッチウィンドウを介してフォーマッタフィールドを設定し、ステップをスキップすると、すべて正常に動作することです。
このメソッドの外で解決しようとすると、DependencyResolver を設定した直後にも機能します。
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
var iindex = DependencyResolver.Current.GetService<IIndex<Type, IFormatter>>();
var test = (ITypedFormatter<SomeClass>) iindex[typeof (SomeClass)];
上記と実行中のアプリケーションの唯一の違いは、サービスがSystem.Web.Script.Serialization.JavaScriptSerializer().Serialize(model)メソッドの内部実行パス内から呼び出されることです。NewtonSoft.Json.JsonSerializerも試しましたが、うまくいきませんでした。
私はこれに本当に困惑しています。