我創建了一個自我搜索程序集,它具有可實現的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