0

我正在尝试使用 Autofac 和 Autofac.Integrations.Web 来注册 ASP.NET MVC 控制器。我目前正在使用程序集扫描来查找控制器,但其中一个需要一个我更愿意传入的特殊参数。下面是我尝试过的注册。

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");            
*/

感谢您的帮助。

4

2 回答 2

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

于 2010-02-26T21:17:01.323 回答
0

如果您想传递任何类对象,请尝试使用 withParameter

例如:

builder.RegisterType<ApplicationSettingsRepository>().As<IApplicationSettingsRepository>()
            .WithParameter(new TypedParameter(typeof(NameValueCollection), ConfigurationManager.AppSettings))
于 2013-05-06T11:20:43.867 回答