2012-01-16 9 views
6

que tienen una aplicación WPF de escritorio utilizando Prisma 4, en mi programa previo Tengo el siguiente código:¿Cómo limitar el prisma 4 para cargar solo módulos especiales con signo?

protected override IModuleCatalog CreateModuleCatalog() 
{ 
    var filepath = Assembly.GetExecutingAssembly().Location; 
    var path = Path.GetDirectoryName(filepath); 
    System.IO.Directory.SetCurrentDirectory(path); 
    path = Path.Combine(path, "Modules"); 
    var moduleCatalog = new DirectoryModuleCatalog() { ModulePath = path }; 
    return moduleCatalog; 
} 

el código anterior está diciendo prisma para cargar todos los archivos .dll de "[mi raíz aplicación] \ Modules" ruta y verifíquelos para ver si alguna clase ha implementado IModule. Lo que quiero hacer es limitar el proceso de carga a solo DLLs que hayan sido firmados con una clave de firma específica para evitar que cualquier desarrollador inyecte su módulo en mi aplicación. por favor, avísenme si estoy siguiendo el camino equivocado para tal problema.

Respuesta

2

Estás en el camino correcto, sin embargo, tienes que ir un poco más lejos. DirectoryModuleCatalog está diseñado para cargar cualquier tipo en el directorio especificado que implemente la interfaz de IModule, como ha visto. Si desea limitar los módulos que se cargan más (por ejemplo, a los ensamblados firmados con una clave específica), debe crear un catálogo de módulo personalizado (probablemente derivado de DirectoryModuleCatalog) y anular el método de inicialización. Inicializar es donde el catálogo del módulo examinará el directorio y cargará una colección de objetos ModuleInfo que contienen la información sobre cualquier módulo en el directorio. Al anular este método, puede examinar los ensamblajes en el directorio y solo cargar módulos de ensambles con la firma adecuada. En el método Initialize, debe rellenar la propiedad Módulos con ModuleInfos of Modules contenidos en ensamblajes válidos.

Luego, en el código anterior, en lugar de crear un nuevo DirectoryModuleCatalog(), creará su catálogo de módulos personalizado.

Tenga en cuenta que, dependiendo de cómo verifique la firma del conjunto, puede que esté cargando el conjunto en la memoria (incluso si no hay módulos disponibles en el catálogo). Si este es el caso, es posible que desee verificar los ensamblajes en un AppDomain separado que luego puede descargarse (por lo tanto, descarga los ensamblajes sin firmar de la memoria).

+1

Esto ayudó mucho, gracias Brian. –

Cuestiones relacionadas