Мне нужна помощь. Я создаю службу Windows с контейнером Autofac. И я использую службу интеграции MEF для создания нескольких альтернативных компонентов для моей службы.Autofac с интеграцией 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();
}
В этом примере все отлично работает. Thi я использую в своей службе. Для запуска теста и отладки моего сервиса я использую Service.Helper из репозитория пакетов Nuget. Everithyng работает отлично тоже. Но. Если я создам установочный пакет в Advance installer и установлю свою службу в системе (Windows 8.1 x64), служба не запускается. Исключение регистрации из службы write System.ArgumentNullException в системе Журнал событий. Исключение скорее всего в этой строке
builder.RegisterComposablePartCatalog (catalog);
Служба не загружает модули из начальной папки. Доступ запрещен из службы в его подпапку. Помоги пожалуйста. Благодарю.