dans mvc 6 rc1 Nous avons utilisé l'interface Notre version Framework est actuellement Étant donné que la mise à niveau Nos contrôleurs dans des assemblages externes (non référencés) renvoie le statut d'un Nous avons essayé d'ajouter manuellement le contrôleur aux contrôleurs enregistrés via le et ... p> maintenant Les assemblages sont définitivement chargés dans le avec nos implémentations précédentes, cela a fonctionné bien en utilisant le isiemlbyprovider code> pour enregistrer les assemblages découverts à l'exécution et injecter des types de contrôleur supplémentaires, dans un Fashion à ce message .. Maintenant, avec RC2, le
IASSEMblyProvider code> a été supprimé et a changé pour (voir référence) .
Net46 CODE>. P>
404 code>. P>
ApplicationPartManager Code>. p>
appdomain code> Comme notre système d'injection de dépendance consiste à trouver et à remplir des services pour d'autres éléments des assemblys externes. P>
IASSEMblyProvider p>
public class ModuleAwareAssemblyProvider : IAssemblyProvider
{
private readonly DefaultAssemblyProvider _defaultProvider;
public ModuleAwareAssemblyProvider(DefaultAssemblyProvider defaultProvider)
{
_defaultProvider = defaultProvider;
}
public IEnumerable<Assembly> CandidateAssemblies
{
get
{
return _defaultProvider.CandidateAssemblies.Concat(ModulesManager.Assemblies).Distinct();
}
}
}
3 Réponses :
Après quelques dépenses de temps travaillant avec le contrôleur code> directement sans résultat, il était temps de revenir à des bases.
Fondamentalement au démarrage des contrôleurs d'application sont enregistrés Je parcourais le GitHUB Responsentiel pour RC2 et est tombé sur le ControllerFeatureProvider code>
. Comme indiqué. P>
var mvcBuilder = services.AddMvc();
foreach(var module in ModulesManager.ReferencedModules)
{
mvcBuilder.AddApplicationPart(module.ReferencedAssembly);
}
Je suis un peu confus sur votre classe modulemanager code>. Est-ce
modulemanager code> ou
modulesManager code>? De toute façon, je ne peux pas sembler trouver une référence à une documentation ou de code source. Comment puis-je continuer à le faire et à entrer dans le
référencéModules code>?
Le modulesManager code> est une classe personnalisée (notre propre classe) utilisée pour rechercher des modules basés sur des chemins spécifiques et des versions référencées. Vous devriez être capable de mettre facilement en œuvre votre propre version comme vous le voyez.
Merci pour la bonne explication. PreservecompilationContext Code> Est-ce que l'astuce m'a fait. Je ne peux pas croire à quel point l'ensemble du noyau ASP.NET est gravement documenté. Je comprends sa nouvelle documentation mais une documentation plus avancée serait la bienvenue.
Merci pour cette recherche, c'est exactement ce que j'avais besoin de savoir pour une situation similaire.
Il suffit d'ajouter le démarrage -> Configurevices
services.AddMvc() .AddApplicationPart(typeof(OtherAssemblyController).GetTypeInfo().Assembly) .AddControllersAsServices();
L'autre accessoire d'évaluation est dans le projet dépendant, je ne peux pas y ajouter de référence. Alors qu'est-ce que je peux faire?
J'ai utilisé un élément d'application en utilisant la méthode d'extension du générateur suivant pour mettre en œuvre la fonctionnalité des plugins. J'espère que cela serait utile pour quelqu'un.
public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); Configuration = builder.Build(); environment = env; } public IHostingEnvironment environment { get; set; } public IConfigurationRoot Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { // Add framework services. var builder = services.AddMvc() .AddFeaturesSupport(this.Configuration, this.environment); }