質問

私は、ASP.NET MVCコントローラを登録するAutofacとAutofac.Integrations.Webを使用しようとしています。私は現在、アセンブリのコントローラを見つけるためにスキャンするが、そのうちの一つは、私が代わりに合格することを好むだろうと、特別なパラメータを必要とする使用しています。私が試してみました登録は以下の通りですが見つかります。

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

ご協力いただきありがとうございます。

役に立ちましたか?

解決

私はいくつかの工夫の後、デバッガでいじくる働い登録を見つけることができた。

var builder = new ContainerBuilder();            

builder.RegisterControllers(Assembly.GetExecutingAssembly());

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

この作品をAutofacが自動的に型IControllerの隠された名前の登録と異なるコントローラを登録しているためです。

他のヒント

uは任意のクラスオブジェクト

を渡したい場合はwithParameterを使用するようにしてください

例えばます:

builder.RegisterType<ApplicationSettingsRepository>().As<IApplicationSettingsRepository>()
            .WithParameter(new TypedParameter(typeof(NameValueCollection), ConfigurationManager.AppSettings))
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top