سؤال

أقوم بترقية التعليمات البرمجية من Autofac 1.4 إلى 2.1.10 مرشح الإصدار.

كانت الوحدة النمطية الخاصة بي قد أجرت مسبقًا مثل هذا:

builder.RegisterCollection<IExceptionHandler>()
                .As<IEnumerable<IExceptionHandler>>()
                .FactoryScoped();
builder.Register<AspNetExceptionHandler>()
                .As<IExceptionHandler>()
                .MemberOf<IEnumerable<IExceptionHandler>>()
                .FactoryScoped();

الآن، RegisterCollection ليس له حمولة زائدة غير معلمة. لا يهمني تعيين اسم. على افتراض أنه من المقبول فقط الانتقال null, ، يبدو رمزتي هكذا في 2.1:

builder.RegisterCollection<IExceptionHandler>(null)
                .As<IEnumerable<IExceptionHandler>>()
                .InstancePerDependency();
builder.RegisterType<AspNetExceptionHandler>()
                .As<IExceptionHandler>()
                .MemberOf<IEnumerable<IExceptionHandler>>(null)
                .InstancePerDependency();

ومع ذلك ، عندما أقوم بتجميع ، أحصل على الخطأ التالي فيما يتعلق .MemberOf:

باستخدام الطريقة العامة 'autofac.registrationextensions.memberof (autofac.builder.registrationBuilder ، السلسلة)' '3' نوع الوسائط

حاولت وضع اسم مجموعة بدلاً من NULL ، فقط في حالة ، ولم يكن له أي تأثير.

ما هي الطريقة الصحيحة لتسجيل المجموعات في 2.1؟

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

المحلول

كما أفهمها ، يمكنك فقط تسجيل حفنة من IExceptionHandler الأنواع ، ثم عندما تطلب IEnumerable<IExceptionHandler> سوف يعتني Autofac 2 بكل شيء من أجلك.

من Newinv2 صفحة:

builder.RegisterType<A1>().As<IA>();
builder.RegisterType<A2>().As<IA>();

var container = builder.Build();

// Contains an instance of both A1 and A2
Assert.AreEqual(2, container.Resolve<IEnumerable<IA>>().Count());
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top