1

私は次のインターフェースとその実装を持っています:

public interface IService
{
}

public class Service1 : IService
{
}

public class DecoratedService
{
    public DecoratedService(IService inner)
    {
    }
}

Service1 は、変更できないコードに登録されています (名前付きの登録ではありません):

builder.RegisterType<Service1>().As<IService>();

したがって、この登録を自分で装飾する必要があります。範囲内でパフォーマンスへの影響を最小限に抑えてこれを達成するにはどうすればよいですか

public class DataModule : Autofac.Module

クラス?

名前付きの既存の IService 登録を変更する必要がある場合は問題ありません (ただし、その方法がわかりません)。関連するすべての質問をstackoverflowで調査しましたが、解決策はありませんでした。

4

1 に答える 1

1

IServiceモジュール内の既存の登録を置き換えて、名前を付けることができるはずです。

builder.RegisterType<Service1>().Named<IService>("implementor");

次に、名前付きサービスのデコレーターを登録します。

builder.RegisterDecorator<IService>(s => new DecoratedService(s), "implementor");

Nick は、Autofac でのデコレータのサポートに関する多くの詳細をブログに投稿しています。

http://nblumhardt.com/2011/01/decorator-support-in-autofac-2-4/

于 2012-05-07T16:00:36.873 に答える