1

私は次のことをセットアップしました:

マーカー インターフェイス 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も試しましたが、うまくいきませんでした。

私はこれに本当に困惑しています。

4

0 に答える 0