PDA

View Full Version : مبتدی: اضافه کردن Add in به برنامه



majid2230
پنج شنبه 15 دی 1390, 12:49 عصر
سلام
من دارم یه برنامه می نویسم که لازم دارم در هنگام اجرا کنترل هایی رو از کاربر گرفته و روی فرم لود کنم ، این کنترل ها به صورت Dll هستند ، کسی پیشنهادی داره که چه جوری میشه این کار رو انجام داد ؟

---------------------------------------------------
البته کنترل ها باید حتما چند تابع مشخص (دارای اسم ، ورودی و خروجی معین شده) داشته باشند

mohammad272005
پنج شنبه 15 دی 1390, 14:15 عصر
بهترین راه (و شاید تنها راه) Reflection باشه.
این #C:
private static IEnumerable<UserControl> GetControls(string dllName)
{
var asm = Assembly.LoadFile(dllName);

foreach (var type in asm.GetTypes())
{
if (type.DeclaringType != typeof (UserControl))
continue;
var constructorInfo = type.GetConstructor(null);
if (constructorInfo != null)
yield return constructorInfo.Invoke(null) as UserControl;
}
}
این Linq:
private static IEnumerable<UserControl> GetControls(string dllName)
{
return from type in Assembly.LoadFile(dllName).GetTypes()
where type.DeclaringType == typeof (UserControl)
select type.GetConstructor(null)
into constructorInfo where constructorInfo != null select constructorInfo.Invoke(null) as UserControl;
}

majid2230
پنج شنبه 15 دی 1390, 16:32 عصر
متاسفانه من این کد رو استفاده کردم ولی هیچی بر نمی گردنه ، آیا کنترلی که ایمپورت میشه باید ویژگی خاصی داشته باشه
این خط کد هم مقدارش Null هست
type.DeclaringType

----------------------------- ویرایش
این مشکل با عوض کردن کد گفته شده با
type.BaseType.Name != "UserControl"
حل شد ، حالا یه سوال دیگه ای که پیش می آد من چه جوری یه کنترل از این نوع بسازم ؟