سؤال

سبق أن طرحت سؤالا هنا حول Autofac لا تتخلص من كائناتي عند انتهاء طلب HTTP. أعتقد الآن أن لدي مشكلة أكبر ، لأن هناك دليلًا على أنه يقدم نفس كائن طلب الطلب. مرة أخرى ، أنا أستخدم التعليمات هنا. الاختبار الخاص بي أكثر تعقيدًا قليلاً لأنني أستخدم بناء جملة المندوب لإنشاء كائن ، لكنني أعتقد أنني أقوم بإبلاغه بطلب العمر. global.asax.cs:

protected void Application_Start(object sender, EventArgs e)
{
    ...
    var builder = new Autofac.Builder.ContainerBuilder();
    builder.Register<IDBConnectionSelector>(
            (c) => new CachingDBConnections(ConstructorArgs...))
        .HttpRequestScoped();

    var container = builder.Build();
    _containerProvider = new ContainerProvider(container);
}
public IContainerProvider ContainerProvider
{
    get { return _containerProvider; }
}
static IContainerProvider _containerProvider;

نيتي هنا هي تسجيل IDBConnectionSelector للحصول على نوع الخرسانة CachingDBConnections التي تم إنشاؤها مع مُنشئ مخصص ولكن مع نطاق طلب HTTP.

بعض طرق كائن CachingDBConnections يفشل في الطلبات اللاحقة بطريقة تقودني إلى الاعتقاد بأنني أحصل على نفس الوقت الذي حصلت عليه في المرة الأخيرة وليست واحدة جديدة لكل طلب.

هل هذا منطقي؟ ما الخطأ الذي افعله؟

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

المحلول 2

اكتشفتها!

كنت أسأل الحاوية الخاطئة لمثيل الكائن-كنت أسأل عنر التطبيق للكائن وليس مونترر الطلب.

دو!

نصائح أخرى

في معظم الأحيان يحدث هذا (في أي حاوية IOC) ستجد أن مكونًا واحدًا على طول سلسلة من التبعيات هو مفردة.

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

أ -> ب -> ج

إذا كان A "مصنع" ، فهو "Singleton" و C هو "مصنع" ، فإن حل A سيحصل على إشارة إلى Singleton B ، والتي ستشير دائمًا إلى نفس C.

لكي يتم إنشاء C جديد في كل مرة تقوم فيها بحل A ، يجب أن تكون B "مصنع".

كيف هو تخميني؟ هل هذه هي المشكلة؟

نيك

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top