اضافه کردن Add in به برنامه
سلام
من دارم یه برنامه می نویسم که لازم دارم در هنگام اجرا کنترل هایی رو از کاربر گرفته و روی فرم لود کنم ، این کنترل ها به صورت Dll هستند ، کسی پیشنهادی داره که چه جوری میشه این کار رو انجام داد ؟
---------------------------------------------------
البته کنترل ها باید حتما چند تابع مشخص (دارای اسم ، ورودی و خروجی معین شده) داشته باشند
نقل قول: اضافه کردن Add in به برنامه
بهترین راه (و شاید تنها راه) 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;
}
نقل قول: اضافه کردن Add in به برنامه
متاسفانه من این کد رو استفاده کردم ولی هیچی بر نمی گردنه ، آیا کنترلی که ایمپورت میشه باید ویژگی خاصی داشته باشه
این خط کد هم مقدارش Null هست
type.DeclaringType
----------------------------- ویرایش
این مشکل با عوض کردن کد گفته شده با
type.BaseType.Name != "UserControl"
حل شد ، حالا یه سوال دیگه ای که پیش می آد من چه جوری یه کنترل از این نوع بسازم ؟