2013-02-17 87 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

相关问题