Джон, это именно то, что я искал. Я использую основы рефлексии и дженерики, поэтому, когда требуется более глубокое знание API, чтобы противостоять обоим, я скучаю по таким вещам, спасибо за ответ.
Ваши предположения верны, конкретные классы закрыты, а T определен для базового класса (BLL).
Код стал таким:
protected override Dictionary<Type, Type> DefineBLLs()
{
string bllsAssembly = ConfigurationManager.AppSettings["BLLsAssembly"];
Type[] types = LoadAssembly(bllsAssembly);
Dictionary<Type, Type> bllsTypes = new Dictionary<Type, Type>();
foreach (Type bllType in types)
{
if (bllType.IsSubclassOf(typeof(BLL<>)))
{
Type baseType = bllType.BaseType;
Type businessObjectType = baseType.GetGenericArguments()[0];
bllsTypes.Add(businessObjectType, bllType);
}
}
return bllsTypes;
}