は、あなたはすべての登録のためにトリガされますすべての登録
public class XModule : Module
{
protected override void AttachToComponentRegistration(
IComponentRegistry componentRegistry, IComponentRegistration registration)
{
// do whatever you want with registration
}
}
AttachToComponentRegistration
のためにトリガされますAttachToComponentRegistration
方法がありAutofacモジュールを実装することができます。
Autofac.Extras.DynamicProxy2
拡張子はRegistrationBuilder
で、Module
はRegistration
となります。 AFAIKでは、 IRegistrationBuilder
を傍受して自動的にメソッドを呼び出す方法がないため、InterceptedBy
などのメソッドをModule
で簡単に使用する方法はありません。あなたが途中でこのようなものでAutofac.Extras.DynamicProxy2
に頼ることなく、古典的なCastle.Coreの傍受を使用してそれを行うことができます
:
public class XModule : Module
{
public XModule()
{
this._generator = new ProxyGenerator();
}
private readonly ProxyGenerator _generator;
protected override void AttachToComponentRegistration(
IComponentRegistry componentRegistry,
IComponentRegistration registration)
{
if (registration.Services
.OfType<IServiceWithType>()
.Any(s => s.ServiceType == typeof(IApplicationService)))
{
registration.Activating += Registration_Activating;
}
}
private void Registration_Activating(Object sender, ActivatingEventArgs<Object> e)
{
Object proxy = this._generator.CreateClassProxyWithTarget(
e.Instance.GetType(),
e.Instance,
e.Context.Resolve<IEnumerable<IInterceptor>>().ToArray());
e.ReplaceInstance(proxy);
}
}
あなたはAutofac.Extras.DynamicProxy2
モジュールのsource codeを閲覧することができますが、あなたが城を統合することができる方法を理解します.CoreとAutofac。
これを上書きせずに既存のコンポーネントにこの承認を 'InterceptedBy <>'どのように適用できますか? –
@OguzhanSoykan私は多くのサンプルを含めるために投稿を編集しました –
あなたの答えに感謝します。私はこの答えが来るだろうと予測していました。私はすでにこのアプローチを実装していて、IRegistrationBuilder *を傍受する方法がないと思っていたことをあなたは話しました。だから、私はあなたの解決策を答えにするつもりですが、最終的にIRegistrationBuilder *を傍受する必要があると思います。 –