これは、LightInject の傍受に固有のものです。ユーザー入力に基づいて傍受ロジックを条件付きでオン/オフできるように、PerWebRequest の有効期間に基づいて傍受ロジックを適用することは可能ですか? たとえば、このようなもの。
public static void Configure()
{
var serviceContainer = new ServiceContainer();
serviceContainer.EnablePerWebRequestScope();
serviceContainer.Register<ITraceSwitcher, TraceSwitcher>(new PerScopeLifetime());
serviceContainer.Register<IMyService, MyService>(new PerScopeLifetime());
serviceContainer.Intercept(x => x.ServiceType == typeof(IMyService), (y, z) => DefineProxyType(z, IsTracingEnabled));
ServiceLocator.SetLocatorProvider(() => new LightInjectServiceLocator(serviceContainer));
}
private static void DefineProxyType(ProxyDefinition proxyDefinition, Func<bool> isTracingEnabled)
{
if (isTracingEnabled())
proxyDefinition.Implement(() => new MyServiceInterceptor(), m => m.Name == "SomeMethod");
}
private static bool IsTracingEnabled()
{
var traceSwitcher = ServiceLocator.Current.GetInstance<ITraceSwitcher>();
return traceSwitcher.IsTracingEnabled();
}
IMyService の有効期間は PerWebRequest として定義されているため、すべての Web 要求に対して作成され、MyService インスタンスを作成するたびに Intercept メソッドを呼び出して、トレースが有効かどうかに応じてインターセプト ロジックを適用することを動的に決定できるという印象を受けました。ユーザーによって無効にされました。ただし、IMyService インスタンスが要求されたときに初めて Intercept メソッドを呼び出し、その後のすべての要求で同じ Interception メカニズムを再利用するようです。
また、MyServiceInterceptor 内で ITraceSwitcher ロジックを使用して、そこで傍受ロジックを使用またはバイパスすることもできますが、リフレクションによるプロキシ呼び出しのオーバーヘッドを回避するためにトレースが無効になっている場合は、プロキシの作成を避けたいと考えていますが、これは Intercept の場合にのみ可能です。メソッドは、Web リクエストごとに呼び出されます。それが可能か、またはより良い方法があるかどうか教えてください。
ありがとう、
サイド・デンマーク。