저는 이메일, ftp와 같은 다양한 방법을 사용하여 파일을 전송할 수있는 Windows 서비스를 작성하고 있습니다. 각 파일 또는 파일 세트는 고유 한 구성 세부 사항을 가질 수 있습니다.C# Windows 플러그인 서비스 플러그인을 사용하는 서비스
생성 된 후에 배달해야하는 모든 파일 또는 파일 세트에 대해 폴더에 놓을 수있는 어셈블리를 만들고 서비스가 다음 예약 된 실행시에 가져옵니다. 이 어셈블리는 파일 또는 파일 세트의 전달 방법을 정의하는 표준 인터페이스를 사용합니다. 이 플러그인 어셈블리는 다른 종속 어셈블리, 즉 외부 ftp 라이브러리 또는 폴더에 포함될 필요가있는 전자 메일 라이브러리를 참조해야 할 수도 있습니다.이 라이브러리는 플러그인 어셈블리를 삭제해야하는 곳입니다.
내 질문에 : 플러그인 어셈블리가있는 폴더에서 종속 어셈블리를 무시하는 방법이 있습니까? 아니면 하나의 폴더에 플러그인 어셈블리를 구성하고 종속 어셈블리를 별도로 구성하는 방법이 있습니까?
여기 내 코드에서 어셈블리를 통해 서비스 루프가 발생합니다. 현재이 폴더에 모든 것을 사용합니다 아마 예외가 발생합니다 :
foreach (var file in Directory.EnumerateFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ConfigurationManager.AppSettings["AssemblyStorage"])))
{
var assembly = Assembly.LoadFrom(file);
Type type = assembly.GetType("ReflectionTest.Plugin");
if (type != null)
{
object obj = Activator.CreateInstance(type);
var resultFtp = type.InvokeMember("FTP", BindingFlags.Default | BindingFlags.InvokeMethod, null,obj, null);
var resultEmail = type.InvokeMember("Email",BindingFlags.Default | BindingFlags.InvokeMethod,null, obj, null);
Console.Write(resultFtp);
Console.Write(resultEmail);
obj = null;
}
assembly = null;
type = null;
}
플러그인 어셈블리 :가 컴파일 된 플러그인 DLL이 결국 위에서 언급 한 폴더에 상주 - (Path.Combine(AppDomain.CurrentDomain.BaseDirectory,ConfigurationManager.AppSettings["AssemblyStorage"])
. 이 플러그인 어셈블리 파일 이름은 무엇이든 될 수 있습니다.
namespace ReflectionTest
{
public class Plugin : ITransferService
{
public bool FTP()
{
return true;
}
public bool Email()
{
return true;
}
}
}
이것은 MEF의 완벽한 후보자처럼 들립니다. http://msdn.microsoft.com/en-us/library/dd460648.aspx –
플러그인 어셈블리의 이름에 규칙을 적용하지 않는 이유는 무엇입니까? 이렇게하면 종속 어셈블리를 필터링 할 수 있습니다. – Bond