Лицензионный компонент плохо сочетается с дизайном DI - PullRequest
3 голосов
/ 21 сентября 2010

Мы лицензировали некоторые сторонние компоненты электронной почты и разработали набор компонентов для нашей системы, которые их используют. Эти компоненты затем загружаются динамически во время выполнения контейнером IoC.

Однако мы недавно заметили, что при тестировании на машине, не предназначенной для разработки, поскольку основной .EXE, который «размещает» наши компоненты, не ссылается и не включает .licx для сторонних компонентов электронной почты (разделение проблем и все такое) что оно вызывает проверку лицензии сторонних компонентов электронной почты.

Есть ли что-нибудь вокруг этого?

Кажется, что это довольно большой недостаток в истории LicenseManager, .licx и др. .NET?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 19 января 2012

После дальнейшего изучения LicenseManager кажется, что метод Validate сканирует только вызывающую сборку текущего домена приложения (информация о лицензии сохраняется как встроенный ресурс с расширением ".licenses").

Одним из решений является запуск кода в отдельном домене приложения.Таким образом, LicenseManager в стороннем компоненте сканирует только встроенные ресурсы текущей сборки, т. Е.

    string assemblyPath = Assembly.GetExecutingAssembly().Location;
    AppDomainSetup appSetup = new AppDomainSetup();
    appSetup.ApplicationBase = new FileInfo(assemblyPath).DirectoryName;
    var newDomain = AppDomain.CreateDomain("NewDomain", AppDomain.CurrentDomain.Evidence, appSetup);
    var myClassInstance = (MyClass)newDomain.CreateInstanceFromAndUnwrap(assemblyPath, typeof(MyClass).FullName);
    myClassInstance.myMethod("foo");

. Чтобы это работало, вам также нужно наследовать MyClass (плюс любые классы, которые передаются междудва домена приложений) от MarshalByRefObject.

0 голосов
/ 23 сентября 2010

Файлы лицензий аналогичны файлам конфигурации - вы можете создавать библиотеки, которые ссылаются на них, но в конечном итоге существует артефакт, который должен жить на диске с исполняемым файлом.

Я предполагаю, что у вас есть файл .licx, и вы просто не хотите ссылаться на него из проекта приложения. Вы можете избежать этого, включив файл .licx в программу установки - он окажется на диске в нужном месте, и проект приложения не станет мудрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...