لا يمكن حل nameValuEcollection مع Autofac
-
24-09-2019 - |
سؤال
أنا أستخدم Autofac 2.1.12 للتعامل مع حقن التبعية ، وأواجه مشكلة مع مشكلة واحدة محددة. لا يمكنني حل التبعية NameValueCollection.
النظر في مقتطف الرمز التالي:
class Foo
{
public Foo(NameValueCollection collection) { }
}
static class Run
{
public static void Main()
{
var builder = new ContainerBuilder();
builder.RegisterType<NameValueCollection>();
builder.RegisterType<Foo>();
using (var scope = builder.Build())
scope.Resolve<Foo>();
}
}
سوف تعطل مع dependencesrolutionexception غير المعلنة:
تم اكتشاف تبعية المكون الدائري: foo -> system.collections.specialized.namevalueCollection -> system.collections.specialized.namevaluecollection.
ومع ذلك ، إذا استبدلت NameValUeCollection بأي نوع آخر ، فإن الرمز يعمل بشكل جيد.
هل أفعل شيئًا ما ، هل هناك شيء مميز حول نوع NameValueCollection الذي أفتقده ، أم أن هذه مشكلة في Autofac نفسها؟
المحلول
هذا حسب التصميم. نرى التلقائي:
يختار AutoFAC تلقائيًا المُنشئ مع معظم المعلمات التي يمكن الحصول عليها من الحاوية.
حاول التسجيل NameValueCollection
مثل ذلك (لست متأكدًا مما إذا كان هذا سيعمل ، رغم ذلك):
builder.RegisterType<NameValueCollection>().UsingConstructor();
إذا لم ينجح ذلك ، فحاول
builder.Register(c => new NameValueCollection());