도움이 필요합니다. Autofac 컨테이너가있는 Windows 서비스를 만듭니다. 그리고 MEF 통합 서비스를 사용하여 내 서비스를위한 몇 가지 대체 구성 요소를 만듭니다. 예를 들어MEF 통합형 오토 팩
:
모듈 모듈 통합을위한 1 개
[Export(typeof(IClass1))]
public class Class1 : IClass1
{
public void Show()
{
Console.WriteLine("Hallo from Class1");
}
}
모듈 2
[Export(typeof(IClass2))]
public class Class2 : IClass2
{
public void Show()
{
Console.WriteLine("Hallo from Class2");
}
}
기본 클래스 - 예이 예에서
class Program
{
private static IContainer Container { get; set; }
static void Main(string[] args)
{
// Create your builder.
var builder = new ContainerBuilder();
/** find all modules in selected folder */
var catalog = new DirectoryCatalog(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\modules", "*Module.dll");
/** register finded modules */
builder.RegisterComposablePartCatalog(catalog);
builder.RegisterType<MyClass>().As<IMyClass>().SingleInstance();
Container = builder.Build();
var cls = Container.Resolve<IMyClass>();
cls.Show();
Console.WriteLine("Class ready. Press Enter");
Console.ReadKey(true);
}
}
class MyClass: IMyClass
{
private readonly IClass1 _class1;
private readonly IClass1 _class3;
private readonly IClass2 _class2;
private readonly IClass2 _class4;
public MyClass(IClass1 class1, IClass2 class2)
{
_class1 = class1;
_class2 = class2;
_class3 = class1;
_class4 = class2;
}
public void Show()
{
_class1.Show();
Console.WriteLine("Class1 ready. Press Enter");
Console.ReadKey(true);
_class2.Show();
Console.WriteLine("Class1 ready. Press Enter");
Console.ReadKey(true);
}
}
internal interface IMyClass
{
void Show();
}
모두 잘 작동. 티 나는 내 봉사에서 사용하는 원칙에 따라야한다. 테스트 시작과 디버깅을 위해 Nuget 패키지 저장소의 Service.Helper를 사용합니다. Everithyng도 잘 작동합니다. 하지만. 사전 설치 프로그램에서 설치 패키지를 만들고 시스템 (Windows 8.1 x64) 서비스에 서비스를 설치하지 않으면 서비스가 시작되지 않습니다. 서비스에서 로깅 예외가 발생했습니다. 시스템 이벤트 로그에 System.ArgumentNullException이 기록됩니다. 이 줄의 예외 가능성이 가장 높음
builder.RegisterComposablePartCatalog (catalog);
서비스 시작 폴더의 모듈을로드하지 않습니다. 서비스에서 그의 하위 폴더로 액세스가 거부되었습니다. 도와주세요. 감사.