تسجيل المجموعات في Autofac 2.1.10 RC
-
22-09-2019 - |
سؤال
أقوم بترقية التعليمات البرمجية من 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());