1

我有以下接口及其实现:

public interface IService
{
}

public class Service1 : IService
{
}

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

Service1 在我无法更改的代码中注册(未命名注册):

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

所以我需要用我自己的来装饰这个注册。我怎样才能在范围内以最小的性能影响来实现这一点

公共类 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 回答