سؤال

أحاول استخدام 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");            
*/

شكرا لك على مساعدتك.

هل كانت مفيدة؟

المحلول

تمكنت من العثور على تسجيل عمل بعد بعض العبث والتعرض لتصحيح الأخطاء.

var builder = new ContainerBuilder();            

builder.RegisterControllers(Assembly.GetExecutingAssembly());

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

هذا يعمل لأن AutoFAC يسجل وحدات تحكم مختلفة تلقائيًا كتسجيلات خفية مسموح بها من النوع IController.

نصائح أخرى

حاول استخدام Pitharameter إذا كنت تريد تمرير أي كائن فئة

على سبيل المثال:

builder.RegisterType<ApplicationSettingsRepository>().As<IApplicationSettingsRepository>()
            .WithParameter(new TypedParameter(typeof(NameValueCollection), ConfigurationManager.AppSettings))
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top