2012-04-26 60 views
1

我有以下接口和它的實現:裝飾現有登記在Autofac

public interface IService 
{ 
} 

public class Service1 : IService 
{ 
} 

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

服務1登記在我不能更改代碼(未命名註冊):

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

所以我需要用我自己的裝飾這個註冊。 Autofac.Module

類:我怎樣才能在

公共類DataModule的範圍性能的影響最小實現這一目標?

這是確定的,如果我需要改變現有的IService註冊與一個名爲(但我還沒有找到如何做到這一點)。我在stackoverflow中研究了所有相關的問題,但其中沒有一個給了我解決方案。

回答

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/

+0

是的,這是一個有趣的想法。值得去嘗試 – Pashec 2012-05-15 10:49:14