4

ここで何をすべきかわからない。invocationInfo.Proceed() は、コンストラクター インジェクションを持つファクトリをインターセプトしようとすると常に失敗します。

var container = new ServiceContainer();
container.Register<ICool,Cool>();
container.Register<ILogger, Logger>();
container.Register<IInterceptor, LoggingInterceptor>();

//Two problem lines
container.Register<int, IAwesome>((factory, value) => new Awesome(value, factory.GetInstance<ICool>()));
container.Intercept(sr => sr.ServiceType == typeof(IAwesome), sf => sf.GetInstance<IInterceptor>());

var awesome = container.GetInstance<int,IAwesome>(100);
awesome.Yo();

私のインターセプターのこのメソッドで失敗します。

public class LoggingInterceptor : IInterceptor
{
    private ILogger _logger;
    public LoggingInterceptor(ILogger logger)
    {
        _logger = logger;
    }
    public object Invoke(IInvocationInfo invocationInfo)
    {
        var returnValue = invocationInfo.Proceed(); //Exception here
        return returnValue;
    }
}

例外:

タイプ 'System.InvalidCastException' の例外が LightInject.dll で発生しましたが、ユーザー コードで処理されませんでした

追加情報: タイプ 'System.Func`1[ConsoleApplication1.IAwesome]' のオブジェクトをタイプ 'System.Object[]' にキャストできません。

Lightinject の新しいタグを作成できませんでした。十分な担当者:/

4

1 に答える 1

8

私は LightInject の作成者であり、Awesome クラスなどのランタイム引数に依存するサービス インスタンスをインターセプトする際のバグであることが確認されています。

バグは修正されました。新しい NuGet パッケージが利用可能になり次第、ここに投稿します。

よろしくお願いします

ベルンハルト・リヒター

于 2014-05-13T14:32:36.600 に答える