مشاركة عبر


الإرشادات التفصيلية: قم بإنشاء أحد تطبيقات القابلة للتوسيع

This معاينة describes how إلى إنشاء a pipeline for an إضافة-في that performs simple آلة حاسبة دالات. It does not demonstrate a real-world السيناريو; rather, it demonstrates the أساسى functionality of a pipeline و how an إضافة-في can provide الخدمات for a مضيف.

This معاينة describes the following tasks:

  • Creating a ‏‫Visual Studio الحل.

  • Creating the pipeline الدليل بنية.

  • Creating the اتفاق و طرق العرض.

  • Creating the إضافة-في-side محول.

  • Creating the مضيف-side محول.

  • Creating the مضيف.

  • Creating the إضافة-في.

  • Deploying the pipeline.

  • تشغيل the تطبيق مضيف.

This pipeline passes فقط قابل للتسلسل أنواع (Double و String), between the مضيف و the إضافة-في. For an مثال that shows how إلى pass collections of complex بيانات أنواع, see الإرشادات التفصيلية: تمرير المجموعات بين المضيفين و إضافة-زر 'Ins'.

The اتفاق for this pipeline defines an كائن model of الرابع arithmetic العمليات: إضافة, subtract, multiply, و divide. The مضيف provides the إضافة-في مع an معادلة إلى calculate, such كـ 2 + 2, و the إضافة-في إرجاع the النتيجة إلى the مضيف.

Version 2 of the آلة حاسبة إضافة-في provides المزيد جارى الحساب possibilities و demonstrates تعيين الإصدار. It هو described في الإرشادات التفصيلية: تمكين توافق مع الإصدارات السابقة كتغييرات مضيف الخاص بك.

ملاحظةملاحظة

You can بحث إضافى نموذج تعليمات برمجية, و العميل التقنية previews of أدوات for إنشاء? إضافة-في pipelines, at the مدارة التوافق مع البرامج الخارجية و إضافة-في Framework موقع تشغيل CodePlex.

المتطلبات الأساسية

You need the following إلى إكمال this معاينة:

  • Visual Studio.

Creating a ‏‫Visual Studio الحل

استخدم a الحل في Visual Studio إلى contain the مشاريع of your pipeline segments.

إلى إنشاء the pipeline الحل

  1. في Visual Studio, إنشاء a جديد مشروع named Calc1Contract. الأساس it تشغيل the فئة مكتبة قالب.

  2. اسم the الحل CalculatorV1.

Creating the Pipeline الدليل بنية

The إضافة-في model يتطلب the pipeline segment تجميعات إلى be placed في a specified الدليل بنية. For المزيد معلومات حول the pipeline بنية, see متطلبات تطوير خط أنابيب.

إلى إنشاء the pipeline الدليل بنية

  1. إنشاء تطبيق مجلد في أي مكان على جهاز الكمبيوتر الخاص بك.

  2. في that مجلد, إنشاء the following بنية:

    Pipeline
      AddIns
        CalcV1
        CalcV2
      AddInSideAdapters
      AddInViews
      Contracts
      HostSideAdapters
    

    It ليس necessary إلى put the pipeline folder بنية في your مجلد التطبيقات; it هو done هنا فقط for convenience. في الخطوة المناسبة، معاينة توضح كيفية تغيير تعليمات برمجية إذا بنية المجلد أنابيب هو في الموقع آخر. راجع متطلبات الدليل خطوط الأنابيب في متطلبات تطوير خط أنابيب.

    ملاحظةملاحظة

    CalcV2المجلد هو غير مستخدمة في ترتيب هو معاينة؛ هو عنصرا نائبا ل الإرشادات التفصيلية: تمكين توافق مع الإصدارات السابقة كتغييرات مضيف الخاص بك.

إنشاء طرق عرض و اتفاق

يعرف المقطع اتفاق لخط الأنابيب هذا ICalc1Contractواجهة، الذي يعرف أربعة وظائف: add و subtract وmultiply و divide.

إلى إنشاء اتفاق

  1. في ‏‫Visual Studio الحل باسم من CalculatorV1، افتح مشروع Calc1Contract.

  2. في مستكشف الحلول، إضافة مراجع تجميعات التالية إلى مشروع Calc1Contract:

    النظام.AddIn.اتفاق.dll

    النظام.AddIn.dll

  3. فئة استثناء الافتراضي في من مستكشف الحلول، التي هو إضافة إلى مشاريع مكتبة فئة الجديدة.

  4. في من مستكشف الحلول، قم بإضافة عنصر جديد? إلى المشروع، وذلك باستخدام واجهة قالب. في إضافة عنصر جديد? صندوق حوار، قم بتسمية واجهة من ICalc1Contract.

  5. في الواجهة ملف، قم بإضافة مساحة الاسم مراجع System.AddIn.Contractو System.AddIn.Pipeline.

  6. استخدم التالي تعليمات برمجية لإكمال مقطع هذا اتفاق. لاحظ أن هذا واجهة يجب أن يكون AddInContractAttributeالسمة.

    Imports System.AddIn.Contract
    Imports System.AddIn.Pipeline
    
    Namespace CalculatorContracts
    
        ' The AddInContractAttribute identifes this pipeline segment as a
        ' contract.
        <AddInContract()> _
        Public Interface ICalc1Contract
            Inherits IContract
    
            Function Add(ByVal a As Double, ByVal b As Double) As Double
            Function Subtract(ByVal a As Double, ByVal b As Double) As Double
            Function Multiply(ByVal a As Double, ByVal b As Double) As Double
            Function Divide(ByVal a As Double, ByVal b As Double) As Double
        End Interface
    
    End Namespace
    
    using System.AddIn.Contract;
    using System.AddIn.Pipeline;
    
    namespace CalculatorContracts
    {
        // The AddInContractAttribute identifes this pipeline segment as a 
        // contract.
        [AddInContract]
        public interface ICalc1Contract : IContract
        {
        double Add(double a, double b);
        double Subtract(double a, double b);
        double Multiply(double a, double b);
        double Divide(double a, double b);
        }
    }
    
  7. بشكل اختياري، بناء على ‏‫Visual Studio الحل. لا يمكن تشغيل الحل إلى أن الإجراء الأخير، ولكن بناء بعد كل إجراء كل مشروع يضمن هو الصحيح.

لأن إضافة-في طريقة العرض "و" عرض مضيف إضافة-في يكون عادة في نفس تعليمات برمجية، خاصة في النسخة الأولى من إضافة-في، يمكن بسهولة إنشاء طرق العرض في نفس الوقت. تختلف بواسطة عامل واحد فقط: إضافة-في طريقة العرض يتطلب AddInBaseAttributeسمة، أثناء عرض المضيف إضافة-في لا يتطلب أية السمات.

لإنشاء إضافة-في طريقة العرض

  1. إضافة مشروع جديد باسم Calc1إضافةInView إلى CalculatorV1 الحل. الأساس it تشغيل the فئة مكتبة قالب.

  2. في مستكشف الحلول، إضافة مرجع إلى النظام.إضافةIn.dll إلى مشروع Calc1إضافةInView.

  3. في من مستكشف الحل، باستثناء فئة الافتراضية هي إضافة ed إلى مشاريع مكتبة فئة الجديدة، و إضافة عنصر جديد? إلى المشروع، وذلك باستخدام القالب واجهة. في صندوق الحوار إضافة عنصر جديد? ، قم بتسمية واجهة من ICalculator.

  4. في الواجهة ملف، قم بإضافة مرجع مساحة الاسم System.AddIn.Pipeline.

  5. استخدم التعليمات البرمجية التالية لإكمال هذا إضافة-في عرض. لاحظ أن هذا واجهة يجب أن يكون AddInBaseAttributeالسمة.

    Imports System.AddIn.Pipeline
    
    Namespace CalcAddInViews
    
        ' The AddInBaseAttribute identifes this interface as the basis for the
        ' add-in view pipeline segment.
        <AddInBaseAttribute()> _
        Public Interface ICalculator
    
            Function Add(ByVal a As Double, ByVal b As Double) As Double
            Function Subtract(ByVal a As Double, ByVal b As Double) As Double
            Function Multiply(ByVal a As Double, ByVal b As Double) As Double
            Function Divide(ByVal a As Double, ByVal b As Double) As Double
        End Interface
    
    End Namespace
    
    using System.AddIn.Pipeline;
    
    namespace CalcAddInViews 
    {
        // The AddInBaseAttribute identifes this interface as the basis for
        // the add-in view pipeline segment.
        [AddInBase()]
        public interface ICalculator 
        {
        double Add(double a, double b);
        double Subtract(double a, double b);
        double Multiply(double a, double b);
        double Divide(double a, double b);
        }
    }
    
  6. بشكل اختياري، بناء على ‏‫Visual Studio الحل.

لإنشاء عرض المضيف إضافة-في

  1. إضافة مشروع جديد باسم Calc1HVA إلى CalculatorV1 الحل. الأساس it تشغيل the فئة مكتبة قالب.

  2. في من مستكشف الحل، باستثناء فئة الافتراضية هي إضافة ed إلى مشاريع مكتبة فئة الجديدة، و إضافة عنصر جديد? إلى المشروع، وذلك باستخدام القالب واجهة. في صندوق الحوار إضافة عنصر جديد? ، قم بتسمية واجهة من ICalculator.

  3. في الواجهة ملف، استخدم تعليمات برمجية التالية لإكمال مضيف عرض الوظيفة الإضافية.

    Namespace CalcHVAs
    
        Public Interface ICalculator
            Function Add(ByVal a As Double, ByVal b As Double) As Double
            Function Subtract(ByVal a As Double, ByVal b As Double) As Double
            Function Multiply(ByVal a As Double, ByVal b As Double) As Double
            Function Divide(ByVal a As Double, ByVal b As Double) As Double
        End Interface
    
    End Namespace
    
    namespace CalcHVAs 
    {
        public interface ICalculator 
        {
            double Add(double a, double b);
            double Subtract(double a, double b);
            double Multiply(double a, double b);
            double Divide(double a, double b);
        }
    }
    
  4. بشكل اختياري، بناء على ‏‫Visual Studio الحل.

إنشاء محول إضافة في-جانب

يتكون هذا المحول إضافة في-جانب من محول العرض للعقد. This pipeline segment converts the أنواع من the إضافة-في عرض إلى the اتفاق.

في this pipeline, the إضافة-في provides a الخدمة إلى the مضيف, و the أنواع تدفق من the إضافة-في إلى the مضيف. Because لا أنواع تدفق من the مضيف إلى the إضافة-في, you do not have إلى تضمين a اتفاق-إلى-عرض محول تشغيل the إضافة-في side of this pipeline.

إلى إنشاء the إضافة-في-side محول

  1. إضافة a جديد مشروع named Calc1AddInSideAdapter إلى the CalculatorV1 الحل. الأساس it تشغيل the فئة مكتبة قالب.

  2. في الحل مستكشف, إضافة مراجع إلى the following تجميعات إلى the Calc1AddInSideAdapter مشروع:

    النظام.AddIn.dll

    النظام.AddIn.اتفاق.dll

  3. إضافة مراجع مشروع? إلى the مشاريع for the adjacent pipeline segments:

    Calc1AddInView

    Calc1Contract

  4. تحديد each مشروع مرجع, و في خصائص التعيين نسخ محلي إلى خطأ. في Visual أساسى, استخدم the References علامة تبويب of مشروع خصائص إلى التعيين نسخ محلي إلى خطأ for the الثاني مراجع مشروع?.

  5. إعادة تسمية the مشروع's الافتراضي فئة CalculatorViewToContractAddInSideAdapter.

  6. في الملف فئة، إضافة مساحة اسم المراجع إلى System.AddIn.Pipeline.

  7. في the فئة ملف, إضافة مساحة الاسم مراجع for the adjacent segments: CalcAddInViews و CalculatorContracts. (في Visual أساسى, these مساحة الاسم مراجع are Calc1AddInView.CalcAddInViews و Calc1Contract.CalculatorContracts, unless you have turned إيقاف the الافتراضي مساحات الاسم في your Visual أساسى مشاريع.)

  8. يطبق AddInAdapterAttributeالسمة إلى CalculatorViewToContractAddInSideAdapterفئة، وذلك لتعريفه إضافة-في-جانب محول.

  9. جعل CalculatorViewToContractAddInSideAdapterيورث الفئة ContractBase، الذي يوفر الافتراضي تطبيق IContractالواجهة، ويقوم بتطبيق واجهة اتفاق لخط أنابيب، من ICalc1Contract.

  10. إضافة على الدالة الإنشائية عام يقبل ICalculator، بالتخزين المؤقت في حقل خاص، وقم باستدعاء الدالة الإنشائية فئة Base.

  11. لتطبيق الأعضاء من ICalc1Contract، بساطة استدعاء مثيل الأعضاء من ICalculator المطابقة التي يتم تمرير الدالة الإنشائية، وإرجاع نتائج. وهذا كلامك العرض ( من ICalculaإلىr) إلى اتفاق ( من ICalc1Contract).

    يلي تعليمات برمجية يظهر محول إضافة في-جانب المكتملة.

    Imports System.AddIn.Pipeline
    Imports Calc1AddInView.CalcAddInViews
    Imports Calc1Contract.CalculatorContracts
    
    Namespace CalcAddInSideAdapters
    
        ' The AddInAdapterAttribute identifes this class as the add-in-side 
        ' adapter pipeline segment.
        <AddInAdapter()> _
        Public Class CalculatorViewToContractAddInSideAdapter
            Inherits ContractBase
            Implements ICalc1Contract
    
            Private _view As ICalculator
    
            Public Sub New(ByVal view As ICalculator)
                MyBase.New()
                _view = view
            End Sub
    
            Public Function Add(ByVal a As Double, ByVal b As Double) As Double Implements ICalc1Contract.Add
                Return _view.Add(a, b)
            End Function
    
            Public Function Subtract(ByVal a As Double, ByVal b As Double) As Double Implements ICalc1Contract.Subtract
                Return _view.Subtract(a, b)
            End Function
    
            Public Function Multiply(ByVal a As Double, ByVal b As Double) As Double Implements ICalc1Contract.Multiply
                Return _view.Multiply(a, b)
            End Function
    
            Public Function Divide(ByVal a As Double, ByVal b As Double) As Double Implements ICalc1Contract.Divide
                Return _view.Divide(a, b)
            End Function
    
        End Class
    End Namespace
    
    using System.AddIn.Pipeline;
    using CalcAddInViews;
    using CalculatorContracts;
    
    namespace CalcAddInSideAdapters 
    {
        // The AddInAdapterAttribute identifes this class as the add-in-side adapter
        // pipeline segment.
        [AddInAdapter()]
        public class CalculatorViewToContractAddInSideAdapter :
            ContractBase, ICalc1Contract 
        {
            private ICalculator _view;
    
            public CalculatorViewToContractAddInSideAdapter(ICalculator view) 
            {
                _view = view;
            }
    
            public virtual double Add(double a, double b) 
            {
                return _view.Add(a, b);
            }
    
            public virtual double Subtract(double a, double b) 
            {
                return _view.Subtract(a, b);
            }
    
            public virtual double Multiply(double a, double b) 
            {
                return _view.Multiply(a, b);
            }
    
            public virtual double Divide(double a, double b) 
            {
                return _view.Divide(a, b);
            }
        }
    }
    
  12. بشكل اختياري، بناء على ‏‫Visual Studio الحل.

قم بإنشاء مضيف من الجانب محول

يتكون هذا المحول مضيف من جانب واحد من اتفاق-إلى-عرض محول. كلامك القطعة من هذا اتفاق لعرض مضيف إضافة-في.

في خط أنابيب، إضافة-توفير الخدمة مضيف وتدفق أنواع من إضافة-في إلى مضيف. لأنه لا يوجد أنواع التدفق من مضيف إلى الوظيفة الإضافية، لم يكن لديك لتضمين طريقة عرض-إلى-اتفاق محول.

لتطبيق إدارة مدة بقاء، استخدم ContractHandleالكائن بإرفاق رمز مميز عمر إلى اتفاق. يجب أن تضع مرجع إلى هذا المؤشر من أجل إدارة عمر إلى العمل. بعد الرمز المميز هو تطبيق، لا يوجد برمجة إضافى هو المطلوبة لأن النظام الوظيفة الإضافى يمكنك dهوpose الكائنات عند أنها لم تعد مستخدمة وجعلها متوفرة لمجموعة البيانات المهملة. لمزيد من المعلومات، راجع إدارة مدة بقاء.

لإنشاء الجانب مضيف محول

  1. إضافة مشروع جديد باسم Calc1HostSideAdapter إلى CalculatorV1 الحل. الأساس it تشغيل the فئة مكتبة قالب.

  2. في مستكشف الحلول، إضافة مراجع تجميعات التالية إلى مشروع Calc1HostSideAdapter:

    النظام.AddIn.dll

    النظام.AddIn.اتفاق.dll

  3. إضافة مراجع مشروع إلى مشاريع لقطاعات متجاورة:

    Calc1Contract

    Calc1HVA

  4. تحديد each مشروع مرجع, و في خصائص التعيين نسخ محلي إلى خطأ. في Visual أساسى, استخدم the References علامة تبويب of مشروع خصائص إلى التعيين نسخ محلي إلى خطأ for the الثاني مراجع مشروع?.

  5. قم بإعادة تسمية مشروع الافتراضي فئة من CalculatorContractToViewHostSideAdapter.

  6. في الملف فئة، إضافة مساحة اسم المراجع إلى System.AddIn.Pipeline.

  7. في the فئة ملف, إضافة مساحة الاسم مراجع for the adjacent segments: CalcHVAs و من CalculatorContracts. (في Visual أساسى، هذه المراجع مساحة الاسم هي Calc1HVA.CalcHVAs و Calc1Contract.CalculatorContracts ، إلا إذا توقف تشغيل مساحات الاسم الافتراضية في مشاريعك Visual أساسى.)

  8. يطبق HostAdapterAttributeالسمة CalculatorContractToViewHostSide محول الفئة، لتعريف كجانب مضيف محول قطعة.

  9. جعل الفئة CalculatorContractToViewHostSideAdapter بتطبيق واجهة يمثل عرض المضيف إضافة-في: Calc1HVAs.ICalculator ( Calc1HVA.CalcHVAs.ICalculator في Visual أساسى).

  10. قم بإضافة على الدالة الإنشائية عام يقبل خط أنابيب اتفاق اكتب ICalc1 اتفاق . الدالة الإنشائية يجب أن ذاكرة التخزين المؤقتة للمرجع للعقد. يجب أيضا إنشاء وتخزين مؤقت جديد ContractHandleللعقد، لإدارة العمر إضافة-بوصة

    ملاحظة هامةهام

    ContractHandleهو هامة لإدارة عمر.إذا فشلت في احتفظ مرجع إلى ContractHandleالكائن، سيتم استرداد مجموعة البيانات المهملة، وسيتم إيقاف تشغيل خط أنابيب أسفل عند البرنامج إلا تتوقع it.يمكن أن يؤدي هذا إلى الأخطاء التي يصعب تشخيص، مثل كـ AppDomainUnloadedException.إيقاف تشغيل هو مرحلة عادية في فترة تواجد خط أنابيب، لذا هو لا توجد طريقة لإدارة عمر التعليمة البرمجية للكشف عن ذلك th هو شرط هو خطأ.

  11. إلى تطبيق الأعضاء من ICalculaإلىr، ببساطة استدعاء أعضاء المقابل من ICalc1Contract المثيل الذي تم تمريره إلى construcإلىr، وإرجاع نتائج. وهذا كلامك اتفاق ( من ICalc1Contract) إلى عرض ( من ICalculator).

    إظهار التعليمة البرمجية التالية المحول مضيف من جانب المكتملة.

    Imports System.AddIn.Pipeline
    Imports Calc1Contract.CalculatorContracts
    Imports Calc1HVA.CalcHVAs
    
    Namespace CalcHostSideAdapters
    
        ' The HostAdapterAttribute identifes this class as the host-side adapter
        ' pipeline segment.
        <HostAdapterAttribute()> _
        Public Class CalculatorContractToViewHostSideAdapter
            Implements ICalculator
    
            Private _contract As ICalc1Contract
            Private _handle As System.AddIn.Pipeline.ContractHandle
    
            Public Sub New(ByVal contract As ICalc1Contract)
                    MyBase.New()
                _contract = contract
                _handle = New ContractHandle(contract)
            End Sub
    
            Public Function Add(ByVal a As Double, ByVal b As Double) As Double _
                    Implements ICalculator.Add
                Return _contract.Add(a, b)
            End Function
    
            Public Function Subtract(ByVal a As Double, ByVal b As Double) As Double _
                    Implements ICalculator.Subtract
                Return _contract.Subtract(a, b)
            End Function
    
            Public Function Multiply(ByVal a As Double, ByVal b As Double) As Double _
                    Implements ICalculator.Multiply
                Return _contract.Multiply(a, b)
            End Function
    
            Public Function Divide(ByVal a As Double, ByVal b As Double) As Double _
                    Implements ICalculator.Divide
                Return _contract.Divide(a, b)
            End Function
    
        End Class
    
    End Namespace
    
    using System.AddIn.Pipeline;
    using CalcHVAs;
    using CalculatorContracts;
    
    namespace CalcHostSideAdapters 
    {
        // The HostAdapterAttribute identifes this class as the host-side adapter
        // pipeline segment.
        [HostAdapterAttribute()]
        public class CalculatorContractToViewHostSideAdapter : ICalculator 
        {
            private ICalc1Contract _contract;
            private System.AddIn.Pipeline.ContractHandle _handle;
    
            public CalculatorContractToViewHostSideAdapter(ICalc1Contract contract) 
            {
                _contract = contract;
                _handle = new ContractHandle(contract);
            }
    
            public double Add(double a, double b) 
            {
                return _contract.Add(a, b);
            }
    
            public double Subtract(double a, double b) 
            {
                return _contract.Subtract(a, b);
            }
    
            public double Multiply(double a, double b) 
            {
                return _contract.Multiply(a, b);
            }
    
            public double Divide(double a, double b) 
            {
                return _contract.Divide(a, b);
            }
        }
    }
    
  12. بشكل اختياري، بناء على ‏‫Visual Studio الحل.

إنشاء مضيف

تفاعل تطبيق مضيف مع إضافة-من خلال عرض المضيف إضافة-في. فهو يستخدم إضافة-في أساليب الاكتشاف والتنشيط التي يوفرها في AddInStoreو AddInTokenالفئات للقيام بما يلي:

  • قم بتحديث ذاكرة تخزين مؤقت لخطوط الأنابيب و إضافة-في الحصول على المعلومات.

  • بحث إضافة-وظائف نوع عرض مضيف ICalculator، تحت الفرعي pipeline الدليل الجذر.

  • مطالبة مستخدم بتحديد الذي إضافة-باستخدام.

  • تنشيط المحدد إضافة-في مجال تطبيق جديد بمستوى الثقة الأمان معينة.

  • قم بتشغيل مخصصة RunCalculatorطريقة، قم باستدعاء وظائف إضافة-في's كما هو محدد بعرض مضيف الوظيفة الإضافية في.

إلى إنشاء مضيف

  1. إضافة مشروع جديد باسم Calc1Host إلى CalculatorV1 الحل. تستند إلى القالب تطبيق وحدة تحكم به.

  2. في مستكشف الحل، إضافة مرجع تجميع النظام.إضافةIn.dll إلى مشروع Calc1Host.

  3. قم بإضافة مرجع مشروع إلى Calc1HVAالمشروع. تحديد مرجع مشروع، وفي خصائص تعيين نسخ محلية خطأ. في Visual أساسى، استخدم علامة تبويب مراجع من خصائص مشروع إلى تعيين النسخ المحلية إلى خطأ .

  4. إعادة تسمية الفئة ملف (وحدة نمطية في Visual أساسى) من MathHost1.

  5. في Visual أساسى، استخدم علامة تبويب التطبيقات من خصائص مشروع صندوق حوار لتعيين كائن بدء التشغيل الرئيسي منخفض .

  6. في الفئة أو وحدة نمطية ملف، قم بإضافة مرجع مساحة الاسم System.AddIn.Hosting.

  7. في الفئة أو وحدة نمطية ملف، قم بإضافة مرجع مساحة الاسم لعرض مضيف من الوظيفة الإضافية: CalcHVAs. (في Visual أساسى، مرجع مساحة الاسم هذا هو Calc1HVA.CalcHVAs، إلا إذا توقف تشغيل مساحات الاسم الافتراضية في مشاريعك Visual أساسى.)

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

  9. في الفئة أو وحدة نمطية ملف، استخدم AddInStore.Updateأسلوب تحديث ذاكرة تخزين مؤقت. استخدام AddInStore.FindAddInطريقة للحصول على مجموعة من الرموز المميزة، واستخدام AddInToken.Activateأسلوب تنشيط إضافة-بوصة

    يلي تعليمات برمجية يظهر تطبيق مضيف المكتملة.

    Imports System.Collections.Generic
    Imports System.Collections.ObjectModel
    Imports System.AddIn.Hosting
    Imports Calc1HVA.CalcHVAs
    
    Namespace MathHost
    
        Module MathHost1
    
            Sub Main()
                ' Assume that the current directory is the application folder, 
                ' and that it contains the pipeline folder structure.
                Dim addInRoot As String = Environment.CurrentDirectory & "\Pipeline"
    
                ' Update the cache files of the pipeline segments and add-ins.
                Dim warnings() As String = AddInStore.Update(addInRoot)
                For Each warning As String In warnings
                    Console.WriteLine(warning)
                Next
    
                ' Search for add-ins of type ICalculator (the host view of the add-in).
                Dim tokens As System.Collections.ObjectModel.Collection(Of AddInToken) = _
                    AddInStore.FindAddIns(GetType(ICalculator), addinRoot)
    
                ' Ask the user which add-in they would like to use.
                Dim calcToken As AddInToken = ChooseCalculator(tokens)
    
                ' Activate the selected AddInToken in a new application domain 
                ' with the Internet trust level.
                Dim calc As ICalculator = _
                    calcToken.Activate(Of ICalculator)(AddInSecurityLevel.Internet)
    
                ' Run the add-in.
                RunCalculator(calc)
            End Sub
    
            Private Function ChooseCalculator(ByVal tokens As Collection(Of AddInToken)) _
                    As AddInToken
    
                If (tokens.Count = 0) Then
                    Console.WriteLine("No calculators are available")
                    Return Nothing
                End If
    
                Console.WriteLine("Available Calculators: ")
                ' Show the token properties for each token in the AddInToken collection
                ' (tokens), preceded by the add-in number in [] brackets.
                Dim tokNumber As Integer = 1
                For Each tok As AddInToken In tokens
                    Console.WriteLine(vbTab & "[{0}]: {1} - {2}" & _
                            vbLf & vbTab & "{3}" & _
                            vbLf & vbTab & "{4}" & _
                            vbLf & vbTab & "{5} - {6}", _
                            tokNumber.ToString, tok.Name, _
                            tok.AddInFullName, tok.AssemblyName, _
                            tok.Description, tok.Version, tok.Publisher)
                    tokNumber = tokNumber + 1
                Next
                Console.WriteLine("Which calculator do you want to use?")
                Dim line As String = Console.ReadLine
                Dim selection As Integer
                If Int32.TryParse(line, selection) Then
                    If (selection <= tokens.Count) Then
                        Return tokens((selection - 1))
                    End If
                End If
                Console.WriteLine("Invalid selection: {0}. Please choose again.", line)
                Return ChooseCalculator(tokens)
            End Function
    
            Private Sub RunCalculator(ByVal calc As ICalculator)
                If IsNothing(calc) Then
                    'No calculators were found, read a line and exit.
                    Console.ReadLine()
                End If
                Console.WriteLine("Available operations: +, -, *, /")
                Console.WriteLine("Request a calculation , such as: 2 + 2")
                Console.WriteLine("Type 'exit' to exit")
                Dim line As String = Console.ReadLine
    
                While Not line.Equals("exit")
                    ' The Parser class parses the user's input.
                    Try
                        Dim c As Parser = New Parser(line)
                        Select Case (c.action)
                            Case "+"
                                Console.WriteLine(calc.Add(c.a, c.b))
                            Case "-"
                                Console.WriteLine(calc.Subtract(c.a, c.b))
                            Case "*"
                                Console.WriteLine(calc.Multiply(c.a, c.b))
                            Case "/"
                                Console.WriteLine(calc.Divide(c.a, c.b))
                            Case Else
                                Console.WriteLine("{0} is an invalid command. Valid commands are +,-,*,/", c.action)
                        End Select
                    Catch Ex As System.Exception
                        Console.WriteLine("Invalid command: {0}. Commands must be formated: [number] [operation] [number]", line)
                    End Try
                    line = Console.ReadLine
    
                End While
            End Sub
        End Module
    
        Class Parser
    
            Public partA As Double
            Public partB As Double
            Public action As String
    
            Friend Sub New(ByVal line As String)
                MyBase.New()
                Dim parts() As String = line.Split(" ")
                partA = Double.Parse(parts(0))
                action = parts(1)
                partB = Double.Parse(parts(2))
            End Sub
    
            Public ReadOnly Property A() As Double
                Get
                    Return partA
                End Get
            End Property
    
            Public ReadOnly Property B() As Double
                Get
                    Return partB
                End Get
            End Property
    
            Public ReadOnly Property CalcAction() As String
                Get
                    Return Action
                End Get
            End Property
        End Class
    
    End Namespace
    
    using System;
    using System.Collections.Generic;
    using System.Collections.ObjectModel;
    using System.AddIn.Hosting;
    using CalcHVAs;
    
    namespace MathHost
    {
        class Program
        {
            static void Main()
            {
                // Assume that the current directory is the application folder, 
                // and that it contains the pipeline folder structure.
                String addInRoot = Environment.CurrentDirectory + "\\Pipeline";
    
                // Update the cache files of the pipeline segments and add-ins.
                string[] warnings = AddInStore.Update(addInRoot);
                foreach (string warning in warnings)
                {
                    Console.WriteLine(warning);
                }
    
                // Search for add-ins of type ICalculator (the host view of the add-in).
                Collection<AddInToken> tokens = 
                    AddInStore.FindAddIns(typeof(ICalculator), addInRoot);
    
                // Ask the user which add-in they would like to use.
                AddInToken calcToken = ChooseCalculator(tokens);
    
                // Activate the selected AddInToken in a new application domain 
                // with the Internet trust level.
                ICalculator calc = 
                    calcToken.Activate<ICalculator>(AddInSecurityLevel.Internet);
    
                // Run the add-in.
                RunCalculator(calc);
            }
    
            private static AddInToken ChooseCalculator(Collection<AddInToken> tokens)
            {
                if (tokens.Count == 0)
                {
                    Console.WriteLine("No calculators are available");
                    return null;
                }
                Console.WriteLine("Available Calculators: ");
                // Show the token properties for each token in the AddInToken collection 
                // (tokens), preceded by the add-in number in [] brackets.
                int tokNumber = 1;
                foreach (AddInToken tok in tokens)
                {
                    Console.WriteLine(String.Format("\t[{0}]: {1} - {2}\n\t{3}\n\t\t {4}\n\t\t {5} - {6}",
                        tokNumber.ToString(),
                        tok.Name,
                        tok.AddInFullName,
                        tok.AssemblyName,
                        tok.Description,
                        tok.Version,
                        tok.Publisher));
                    tokNumber++;
                }
                Console.WriteLine("Which calculator do you want to use?");
                String line = Console.ReadLine();
                int selection;
                if (Int32.TryParse(line, out selection))
                {
                    if (selection <= tokens.Count)
                    {
                        return tokens[selection - 1];
                    }
                }
                Console.WriteLine("Invalid selection: {0}. Please choose again.", line);
                return ChooseCalculator(tokens);
            }
    
            private static void RunCalculator(ICalculator calc)
            {
    
                if (calc == null)
                {
                    //No calculators were found; read a line and exit.
                    Console.ReadLine();
                }
                Console.WriteLine("Available operations: +, -, *, /");
                Console.WriteLine("Request a calculation , such as: 2 + 2");
                Console.WriteLine("Type \"exit\" to exit");
                String line = Console.ReadLine();
                while (!line.Equals("exit"))
                {
                    // The Parser class parses the user's input.
                    try
                    {
                        Parser c = new Parser(line);
                        switch (c.Action)
                        {
                            case "+":
                                Console.WriteLine(calc.Add(c.A, c.B));
                                break;
                            case "-":
                                Console.WriteLine(calc.Subtract(c.A, c.B));
                                break;
                            case "*":
                                Console.WriteLine(calc.Multiply(c.A, c.B));
                                break;
                            case "/":
                                Console.WriteLine(calc.Divide(c.A, c.B));
                                break;
                            default:
                                Console.WriteLine("{0} is an invalid command. Valid commands are +,-,*,/", c.Action);
                                break;
                        }
                    }
                    catch
                    {
                        Console.WriteLine("Invalid command: {0}. Commands must be formated: [number] [operation] [number]", line);
                    }
    
                    line = Console.ReadLine();
                }
            }
        }
    
        internal class Parser
        {
            double a;
            double b;
            string action;
    
            internal Parser(string line)
            {
                string[] parts = line.Split(' ');
                a = double.Parse(parts[0]);
                action = parts[1];
                b = double.Parse(parts[2]);
            }
    
            public double A
            {
                get { return a; }
            }
    
            public double B
            {
                get { return b; }
            }
    
            public string Action
            {
                get { return action; }
            }
        }
    }
    
    ملاحظةملاحظة

    وهذا تعليمات برمجية تفترض أن بنية المجلد خطوط الأنابيب الموجود في مجلد التطبيقات.إذا قمت بتحديد موقعة من مكان آخر، تغيير الخط تعليمات برمجية الذي يعين addInRootالمتغير، حيث يحتوي المتغير على مسار الخاص بك بنية الدليل خطوط الأنابيب.

    تستخدم التعليمة البرمجية ChooseCalculatorأسلوب سرد الرموز المميزة ومطالبة مستخدم باختيار إضافة-بوصة RunCalculatorأسلوب يطالب مستخدم التعبيرات الرياضية البسيطة، يوزع تعبيرات تستخدم Parserللفئات، ويعرض نتائج التي تم إرجاعها بواسطة إضافة-بوصة

  10. بشكل اختياري، بناء على ‏‫Visual Studio الحل.

Creatفيg إضافة-في

إضافة-في implements الأساليب المحددة إضافة-في عرض. وهذا إضافة-تطبيق Add، Subtract، Multiply، و Divideالعمليات وإرجاع نتائج إلى مضيف.

لإنشاء إضافة-في

  1. إضافة مشروع جديد يسمى إضافة InCalcV1 إلى CalculatorV1 الحل. الأساس it تشغيل the فئة مكتبة قالب.

  2. في مستكشف الحل، إضافة مرجع تجميع النظام.إضافةIn.dll إلى مشروع.

  3. إضافة مرجع مشروع إلى المشروع Calc1إضافةInView. تحديد مرجع مشروع، و في خصائص، قم بتعيين نسخة محلية إلى خطأ. في Visual أساسى، استخدم علامة تبويب مراجع من خصائص مشروع إلى تعيين النسخ المحلية إلى خطأ مرجع في مشروع.

  4. إعادة تسمية فئة AddInCalcV1.

  5. في الملف فئة إضافة مرجع مساحة الاسم System.AddInو إضافة-في جزء طريقة العرض: CalcAddInViews ( Calc1AddInView.CalcAddInViews في Visual أساسى).

  6. يطبق AddInAttributeالسمة إلى AddInCalcV1الفئة، لتعريف فئة إضافة-بوصة

  7. جعل AddInCalcV1الفئة بتطبيق واجهة التي تمثل إضافة-في عرض: CalcAddInViews.ICalculator ( Calc1AddInView.CalcAddInViews.ICalculator في Visual أساسى).

  8. قم بتطبيق الأعضاء من ICalculator بإرجاع نتائج الحسابات المناسبة.

    إظهار التعليمة البرمجية التالية في إكمال إضافة-في.

    Imports System.AddIn
    Imports Calc1AddInView.CalcAddInViews
    
    Namespace CalcAddIns
    
        ' The AddInAttribute identifies this pipeline segment as an add-in.
        <AddIn("Calculator AddIn", Version:="1.0.0.0")> _
        Public Class AddInCalcV1
            Implements ICalculator
    
            Public Function Add(ByVal a As Double, ByVal b As Double) As Double _
                    Implements ICalculator.Add
                Return (a + b)
            End Function
    
            Public Function Subtract(ByVal a As Double, ByVal b As Double) As Double _
                    Implements ICalculator.Subtract
                Return (a - b)
            End Function
    
            Public Function Multiply(ByVal a As Double, ByVal b As Double) As Double _
                    Implements ICalculator.Multiply
                Return (a * b)
            End Function
    
            Public Function Divide(ByVal a As Double, ByVal b As Double) As Double _
                    Implements ICalculator.Divide
                Return (a / b)
            End Function
        End Class
    
    End Namespace
    
    using System.Collections.Generic;
    using System.AddIn;
    using CalcAddInViews;
    
    namespace CalcAddIns
    {
        // The AddInAttribute identifies this pipeline segment as an add-in.
        [AddIn("Calculator AddIn",Version="1.0.0.0")]
        public class AddInCalcV1 : ICalculator
        {
            public double Add(double a, double b)
            {
                return a + b;
            }
    
            public double Subtract(double a, double b)
            {
                return a - b;
            }
    
            public double Multiply(double a, double b)
            {
                return a * b;
            }
    
            public double Divide(double a, double b)
            {
                return a / b;
            }
        }
    }
    
  9. بشكل اختياري، بناء على ‏‫Visual Studio الحل.

نشر في خط أنابيب

أنت الآن جاهز إلى إنشاء ونشر مقاطع الوظيفة الإضافية إلى بنية direcإلىry أنابيب المطلوبة.

لنشر القطع على خط أنابيب

  1. For each مشروع في the الحل, استخدم the بنية علامة تبويب of مشروع خصائص (the يحول برمجياً علامة تبويب في Visual أساسى) إلى التعيين the القيمة of the إخراج مسار (the بنية إخراج مسار في Visual أساسى). إذا قمت بتسميته تطبيق المجلد MyApp، على سبيل المثال، سيتم بنية المشاريع في المجلدات التالية:

    Project

    Path

    AddInCalcV1

    MyApp\Pipeline\الوظائف الإضافية\CalcV1

    Calc1AddInSideAdapter

    MyApp\Pipeline\AddInSideAdapters

    Calc1AddInView

    MyApp\Pipeline\AddInViews

    Calc1Contract

    MyApp\Pipeline\Contracts

    Calc1Host

    اسم التطبيق

    Calc1HostSideAdapter

    MyApp\Pipeline\HostSideAdapters

    Calc1HVA

    اسم التطبيق

    ملاحظةملاحظة

    If you decided إلى put your pipeline folder بنية في a الموقع غير ذلك than your مجلد التطبيقات, you must تعديل the paths shown في the جدول accordingly.راجع متطلبات الدليل خطوط الأنابيب في متطلبات تطوير خط أنابيب.

  2. بنية the ‏‫Visual Studio الحل.

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

    ملاحظةملاحظة

    في حالة عدم تغيير نسخ محلية ل خطأ ل Calc1AddInViewمشروع مرجع في AddInCalcV1مشروع، إلى منع مشاكل في سياق برنامج تحميل الوظيفة الإضافية من الآن موجود.

    للحصول على المعلومات حول توزيع إلى أنابيب، راجع متطلبات تطوير خط أنابيب.

تشغيل تطبيق مضيف

أنت الآن جاهز لتشغيل مضيف والتفاعل معها إضافة-في.

إلى تشغيل التطبيق المضيف

  1. في تعجيل الأوامر، انتقل إلى الدليل تطبيق و تشغيل تطبيق مضيف، Calc1Host.exe .

  2. العثور على مضيف متوفراً على كافة إضافة-وظائف نوعها ويطالبك بتحديد إضافة-في. قم بإدخال 1 لإضافة متوفر فقط-في.

  3. Enter الزر الزر معادلة للحاسبة، مثل كـ 2 + 2. يجب أن يكون هناك مسافات بين الأرقام و عامل التشغيل.

  4. نوع إنهاء وضغط المفتاح Enter الزر بإغلاق تطبيق.

راجع أيضًا:

المهام

الإرشادات التفصيلية: تمكين توافق مع الإصدارات السابقة كتغييرات مضيف الخاص بك

الإرشادات التفصيلية: تمرير المجموعات بين المضيفين و إضافة-زر 'Ins'

المبادئ

متطلبات تطوير خط أنابيب

عقود وطرق العرض، و محولات

تطوير خطوط الأنابيب