2010-02-26 174 views
0

我想使用Autofac和Autofac.Integrations.Web來註冊ASP.NET MVC控制器。我目前正在使用程序集掃描來查找控制器,但其中一個需要一個特殊的參數,我寧願傳入。下面是我嘗試過的註冊。自定義Autofac控制器註冊

var builder = new ContainerBuilder(); 

builder.RegisterControllers(Assembly.GetExecutingAssembly()); 

// so far I have tried 
builder.Register<SpecialController>(c => 
    new SpecialController(wierdParam, c.Resolve<IDependency>()) 
).Named<SpecialController>("controller.special") 
.As<SpecialController>().As<IController>();    

/* And this 
builder.Register<SpecialController>(c => 
    new SpecialController(url, c.Resolve<IDependency>()) 
);    
*/ 

/* plus this 
builder.Register<SpecialController>(c => 
    new SpecialController(url, c.Resolve<IDependency>()) 
).Named<SpecialController>("controller.special");    
*/ 

謝謝你的幫助。

回答

2

我能夠找到一個註冊,經過一些修改和調試後的工作。

var builder = new ContainerBuilder();    

builder.RegisterControllers(Assembly.GetExecutingAssembly()); 

builder.Register<IController>(c => 
    new SpecialController(weirdParam, c.Resolve<IDependency>()) 
).Named<IController>("controller.special"); 

這工作,因爲Autofac自動註冊不同控制器的類型IController隱藏命名註冊。

+0

高興你發現了它,也許我們應該添加一個擴展來簡化這種override-我帶你去看看它。謝謝! – 2010-02-27 21:48:21

+1

謝謝你這麼棒的工具。啓動和運行非常容易。即使你不添加這個作爲擴展,你可能會考慮將其添加到MVC/Web集成wiki頁面。 – smaclell 2010-03-01 17:02:06

0

嘗試使用withParameter如果u想通過任何類對象

如:

builder.RegisterType<ApplicationSettingsRepository>().As<IApplicationSettingsRepository>() 
      .WithParameter(new TypedParameter(typeof(NameValueCollection), ConfigurationManager.AppSettings))