2016-02-05 64 views
1

我正在使用Autofac,並且我不是IoC主設備。註冊在單個實例上有明確實現的多個接口

考慮這種情況:

public interface IBeforeRequestTask 
{ 
    void Execute(); 
} 

public interface IAfterRequestTask 
{ 
    void Execute(); 
} 

public class TaskExecutor : IBeforeRequestTask, IAfterRequestTask 
{ 
    void IBeforeRequestTask.Execute() 
    { 
     // code 
    } 

    void IAfterRequestTask.Execute() 
    { 
     // code 
    } 
} 

因此,我們有明確的實現。 你將如何註冊這些接口?

我認爲,我們不能做到這一點:

builder.RegisterType<IBeforeRequestTask> ... 
builder.RegisterType<IAfterRequestTask> ... 

我在Autofac Registration Docs,我們必須註冊具體類型讀取。
類似的問題,但沒有治療Autofac是這個:TinyIoC: Register multiple interfaces on a single instance

嗯,我知道,這可能是做1-1輕鬆(每級一個接口,那麼你註冊的具體類型)。但現在我很好奇它。
不記得在那裏我看到像使用StructureMap下面的代碼(可以是錯誤的):

action.AddTypesOf<IBeforeRequestTask>(); 
action.AddTypesOf<IAfterRequestTask>(); 

希望我自己清楚。謝謝你們。

編輯
我創建this樣的幫助。 ;-)

+0

我真的不明白這個問題。無論成員是以實際類型隱式還是顯式實現,使用接口訪問成員的方式都是相同的。您是否觀察到了差異,或者這是一種主動的「讓我們在開始做這件事之前弄清楚這個問題」的問題類型? –

+1

請參閱[「應該在其標題中包含」標籤「?」](http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles),其中共識是「不,他們不應該」! –

+0

謝謝@AndreasNiedermair ... :-) - 幹得好。我學到了。 +1教導正確的方式提問(我只讀了當我輸入問題時出現的內容,類似的問題等等)。 –

回答

1

我不太確定你想實現什麼,但是如果你想註冊單個類在兩個接口下的容器中可用,並且你想擁有它的單個實例,你可以這樣做。

builder.RegisterType<TaskExecutor>().As<IBeforeRequestTask>().As<IAfterRequestTask>().SingleInstance(); 
+0

其實它的作品!我的實現是錯誤的!謝謝。 –