0

AutofacとAutofac.Integrations.Webを使用してASP.NETMVCコントローラーを登録しようとしています。現在、アセンブリスキャンを使用してコントローラーを検索していますが、そのうちの1つには、代わりに渡す必要のある特別なパラメーターが必要です。以下は私が試した登録です。

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 に答える