نمایش نتایج 1 تا 5 از 5

نام تاپیک: دسترسی به کلاس از طریق dll

  1. #1

    دسترسی به کلاس از طریق dll

    سلام
    من یه dll دارم میخوام بدونه اضافه کردن به referenceهای سرویسم به کلاسه داخلش که یک bll هست دسترسی داشته باشم.
    چون از سمت کلاینت نمی تونه فرم مربوطه رو باز کنه و از xml خطا میگیره و باید از xmlInclude استفاده کنم ولی نمی خوام dll به referenceها اضافه کنم.
    اگه راهی بگید که بشه به کلاسهای داخل dll دسترسی پیدا کنم بدون اینکه به referenceها اضافه کنم ممنون می شم.

  2. #2
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736

    نقل قول: دسترسی به کلاس از طریق dll

    نقل قول نوشته شده توسط sima_2n5k مشاهده تاپیک
    سلام
    من یه dll دارم میخوام بدونه اضافه کردن به referenceهای سرویسم به کلاسه داخلش که یک bll هست دسترسی داشته باشم.
    چون از سمت کلاینت نمی تونه فرم مربوطه رو باز کنه و از xml خطا میگیره و باید از xmlInclude استفاده کنم ولی نمی خوام dll به referenceها اضافه کنم.
    اگه راهی بگید که بشه به کلاسهای داخل dll دسترسی پیدا کنم بدون اینکه به referenceها اضافه کنم ممنون می شم.
    اگر فرض کنیم که این چیزی که بهش دی‌ال‌ال میگید در حقیقت یک دات‌نت اسمبلیه (اگر نیست از این خط به پائین را نخوانید).
    استفاده کردن از رفلکشن و استفاده از پلاگینها را باید مطالعه کنید.

    در ضمن اگر دلیلی برایه این احتیاج که بدانه استفاده از رفرانس بهش از کلاسها استفاده کنید را توضیح بدید شاید بتونیم مشکل اصلیتان را درک کنیم، چونکه چیزی که درخاست کردید با اینکه شدنی هست زحماتش به اینکه چه فایده‌ای میخواهید عایدتان بشه مشخص نیست.
    یک روش دیگر که بیشتر مممکن است به کارتان بیاد استفاده از اینترفیسهاست ، به جایه استفاده از کلاسها.

  3. #3

    نقل قول: دسترسی به کلاس از طریق dll

    نقل قول نوشته شده توسط sima_2n5k مشاهده تاپیک
    سلام من یه dll دارم میخوام بدونه اضافه کردن به reference های سرویسم به کلاسه داخلش که یک bll هست دسترسی داشته باشم. چون از سمت کلاینت نمی تونه فرم مربوطه رو باز کنه و از xml خطا میگیره و باید از xmlInclude استفاده کنم ولی نمی خوام dll به referenceها اضافه کنم. اگه راهی بگید که بشه به کلاسهای داخل dll دسترسی پیدا کنم بدون اینکه به referenceها اضافه کنم ممنون می شم.
    سلام.
    شما دو راه دارید (با فرض به اینکه راه حل بهتری غیر از Dynamic Load اون Assembly نداشته باشید):


    1. اون Assembly رو توسط Assembly.LoadFile لود کنید. بعد با استفاده از Type مورد نظر و با استفاده از کلاس Activator، کلاس مورد نظر خودتون رو با استفاده از متود CreateInstance، ایجاد کرده و متود / Property مورد نظر رو Call کنید. (البته کدی که برای اینکار باید بنویسید قدری کثیف هستش).
    2. اگر از C#‎‎ 4.0 استفاده می کنید، می تونید بدین شکل عمل کنید:


    Assembly asm = Assembly.LoadFile(@"d:\myAssembly.dll");
    Type type = asm.GetType("WhateverNamespace.MyClass");
    dynamic obj = Activator.CreateInstance(type);
    int a = obj.MyProp + 1;

    در کد فوق، ابتدا من Assembly مورد نظر رو با LoadFile لود می کنم. سپس تایپ اون کلاس مورد نظرم در Namespace مربوطه رو می گیرم و به CreateInstance میدم و مقدار بازگشتی رو در متغیری از نوع dynamic ذخیر می کنم. از اینجا به بعد، هر کاری روی obj که یک متغیر dynamic هستش انجام بدید، در Runtime نتیجه اش رو خواهید دید. بعنوان مثال، من MyProp رو که یک int برمیگردونه روی obj خودم Call کردم (حتی اگر Property یا Method ای رو جای MyProp بنویسید که وجود نداره، این مساله در Compile-Time با مشکل مواجه نمیشه و در Runtime هستش که نتیجه رو خواهید دید). انجام همین کار در C#‎‎ نسخه های قدیمی تر، مستلزم نوشتن کدهای Boilerplate هستش، اما روش در کل همینه.
    موفق باشید.

  4. #4

    نقل قول: دسترسی به کلاس از طریق dll

    نقل قول نوشته شده توسط mehdi.mousavi مشاهده تاپیک
    سلام.
    شما دو راه دارید (با فرض به اینکه راه حل بهتری غیر از Dynamic Load اون Assembly نداشته باشید):


    1. اون Assembly رو توسط Assembly.LoadFile لود کنید. بعد با استفاده از Type مورد نظر و با استفاده از کلاس Activator، کلاس مورد نظر خودتون رو با استفاده از متود CreateInstance، ایجاد کرده و متود / Property مورد نظر رو Call کنید. (البته کدی که برای اینکار باید بنویسید قدری کثیف هستش).
    2. اگر از C#‎‎‎ 4.0 استفاده می کنید، می تونید بدین شکل عمل کنید:

    Assembly asm = Assembly.LoadFile(@"d:\myAssembly.dll");
    Type type = asm.GetType("WhateverNamespace.MyClass");
    dynamic obj = Activator.CreateInstance(type);
    int a = obj.MyProp + 1;

    در کد فوق، ابتدا من Assembly مورد نظر رو با LoadFile لود می کنم. سپس تایپ اون کلاس مورد نظرم در Namespace مربوطه رو می گیرم و به CreateInstance میدم و مقدار بازگشتی رو در متغیری از نوع dynamic ذخیر می کنم. از اینجا به بعد، هر کاری روی obj که یک متغیر dynamic هستش انجام بدید، در Runtime نتیجه اش رو خواهید دید. بعنوان مثال، من MyProp رو که یک int برمیگردونه روی obj خودم Call کردم (حتی اگر Property یا Method ای رو جای MyProp بنویسید که وجود نداره، این مساله در Compile-Time با مشکل مواجه نمیشه و در Runtime هستش که نتیجه رو خواهید دید). انجام همین کار در C#‎‎‎ نسخه های قدیمی تر، مستلزم نوشتن کدهای Boilerplate هستش، اما روش در کل همینه.
    موفق باشید.
    سلام
    من دارم یه برنامه پلاگینی می نویسم وقتی dll پلاگینم را load می کنم و بعد می خواهم ازش instance بگیرم (همین کاری که شما اینجا گفتین)بنا به اینکه پلاگینم از نوع usercontrol یا windows.Form باشه 2 خطای زیر رو می گیرم :
    اگر usercontrol باشد : exeption has been thrown by the target of an envocation
    اگر windows.Form باشد :No parameterless constructor defined for this object
    {
    دستوری که سرش خطا می گیره اینه :
    (object obj = System.Activator.CreateInstance(type

    در ضمن من Visual studion 2010 ندارم که dynamic Type داشته باشم
    لطفا من رو راهنمایی کنید ممنونم م م م م م

  5. #5

    نقل قول: دسترسی به کلاس از طریق dll

    نقل قول نوشته شده توسط akhavan_a مشاهده تاپیک
    سلام
    من دارم یه برنامه پلاگینی می نویسم وقتی dll پلاگینم را load می کنم و بعد می خواهم ازش instance بگیرم (همین کاری که شما اینجا گفتین)بنا به اینکه پلاگینم از نوع usercontrol یا windows.Form باشه 2 خطای زیر رو می گیرم :
    اگر usercontrol باشد : exeption has been thrown by the target of an envocation
    اگر windows.Form باشد :No parameterless constructor defined for this object
    {
    دستوری که سرش خطا می گیره اینه :
    (object obj = System.Activator.CreateInstance(type

    در ضمن من Visual studion 2010 ندارم که dynamic Type داشته باشم
    لطفا من رو راهنمایی کنید ممنونم م م م م م
    سلام مشکلم حل شد می گم که اگه کسی این error و داشت کمکش کنه : خود usercontrol ام با connectionstring اش مشکل داشت یعنی کلا اشکال وصل شدن به دیتابیس داشت.
    فرم هم این ایراد و داشت که obj (آبجکتی که createinstance کرده بودم) را به فرم Cast نکرده بودم .

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •