我创建了一个自我搜索程序集,它具有可实现的ISearchable接口。它还提供了搜索电话号码的功能,因此它具有实现ISearchable的IPhoneNumberSearchable。然后我通过装配寻找实现IPhoneNumberSearchable的任何内容并调用Search。如果类实现了IPhoneNumberSearchable和ISearchable,它只会调用ISearchable方法。关于如何使这项工作的任何想法?代码跟随通用方法,它采用实现另一个接口的接口,而不是调用正确的方法
public class SearchManager
{
private ISearchItem[] Search<T>(string searchValue) where T: class,ISearchable
{
Assembly current = System.Reflection.Assembly.GetExecutingAssembly();
IEnumerable<T> instances = from t in Assembly.GetExecutingAssembly().GetTypes()
where t.GetInterfaces().Contains(typeof(T))
&& t.GetConstructor(Type.EmptyTypes) != null
select Activator.CreateInstance(t) as T;
var list = new List<ISearchItem>();
foreach (T item in instances)
{
try
{
T i = item as T;
list.AddRange(item.Search(searchValue));
}
catch (System.Exception) { }
}
return list.ToArray();
}
/// <summary>
/// Searches the specified search value.
/// </summary>
/// <param name="searchValue">The search value.</param>
/// <returns></returns>
public ISearchItem[] Search(string searchValue)
{
return Search<ISearchable>(searchValue);
}
/// <summary>
/// Searches for phone number.
/// </summary>
/// <param name="phoneNumber">The phone number.</param>
/// <returns></returns>
public ISearchItem[] SearchForPhoneNumber(string phoneNumber)
{
return Search<IPhoneSearchable>(phoneNumber);
}
}
/// <summary>
///
/// </summary>
public interface ISearchable
{
ISearchItem[] Search(string searchValue);
}
/// <summary>
///
/// </summary>
public interface ISearchable
{
ISearchItem[] Search(string searchValue);
}
public class CustomerManager : Search.IPhoneSearchable,Search.ISearchable
{
/// <summary>
/// Searches the specified phone number.
/// </summary>
/// <param name="phoneNumber">The phone number.</param>
/// <returns></returns>
Search.ISearchItem[] Search.IPhoneSearchable.Search(string phoneNumber)
{
//Search based upon phone number
}
/// <summary>
/// Searches the specified search value.
/// </summary>
/// <param name="searchValue">The search value.</param>
/// <returns></returns>
Search.ISearchItem[] Search.ISearchable.Search(string searchValue)
{
//Search on anything code
}
}
我没有解决您的问题,但看看MEF - 它看起来像要重新发明轮子:http://mef.codeplex.com/ – BrokenGlass 2011-03-21 16:20:01