2013-02-17 48 views
2

autofac我有這個類:如何參數傳遞到使用RegisterType和控制器工廠

public class MessageService 
{ 
    private readonly IMessageSender messageSender; 

    public MessageService(IMessageSender messageSender) 
    { 
     this.messageSender = messageSender; 
    } 
} 

如何註冊autofac通過內部構造函數的參數:

var builder = new ContainerBuilder(); 
builder.RegisterControllers(typeof(MvcApplication).Assembly); 
var container = builder.Build(); 
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 
builder.RegisterType<MandrillMessageSender>().As<IMessageSender>(); 

builder.RegisterType<MessageService>(new MandrillMessageSender()); // NOTE THIS STRING IS NOT WORKING 

所以結果應該這樣工作,當我在控制器構造函數中傳遞參數時,應該使用插入的MandrillMessageSerder創建messageService對象。

public Home(MessageService messageService) 

回答

1

您需要調用builder.Build()

var builder = new ContainerBuilder(); 
builder.RegisterControllers(typeof(MvcApplication).Assembly); 
builder.RegisterType<MandrillMessageSender>().As<IMessageSender>(); 
builder.RegisterType<MessageService>(); 

var container = builder.Build(); 
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 

注意,你不需要通過任何在MessageService註冊,如果你只有一個實現IMessageSender接口之前做的所有RegisterType電話(Autofac會知道你需要那裏的)

+0

謝謝你的朋友!剛剛嘗試過,它完美的工作!事實上,我在註冊令中犯了一個愚蠢的錯誤。之前我沒有使用自動執行,所以這就是爲什麼困惑!再次感謝你:) – Sergey 2013-02-17 13:52:32

相關問題