구현할 수있는 ISearchable 인터페이스가있는 자체 검색 어셈블리를 만듭니다. 또한 전화 번호에서 검색 할 수있는 기능을 제공하므로 ISearchable을 구현하는 IPhoneNumberSearchable을 갖습니다. 그런 다음 어셈블리를 통해 IPhoneNumberSearchable을 구현하고 검색을 호출하는 항목을 찾습니다. 클래스가 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