Projektuję strukturę wtyczki dla ASP.NET MVC3, używając widoków maszynki Razor, i mam problem z poprawnym działaniem osadzonych widoków.Struktura wtyczki z ASP.NET MVC3 i osadzonymi widokami Razor
Ramy Wtyczka przeznaczona jest mieć te funkcje:
- Każda wtyczka ma swoje własne modele, kontrolery i widoki. Widoki są wbudowane zasoby i kontrolery wywodzą się z klasy PluginController
- wtyczek mają referencje zależność do wspólnej klasy biblioteki, który definiuje klasy bazowej PluginController
- „shell” aplikacji WWW, który obsługuje wtyczki nie może zawierać odwołań do jakichkolwiek wtyczek w czasie projektowania, ponieważ nie wie w czasie projektowania, które wtyczki ma.
- dll pluginu są opuszczane w folderze w aplikacji powłoki, która jest nie folder/bin
- Skorupa dba:
- odkrywaniu wtyczek (przy użyciu odbicia)
- Rejestrowy wszystkie kontrolery (używam do tego Spring.Net)
- Tworzenie trasy do kontrolerów
- obsługujących pliki ostrzami (cshtml) poprzez zwyczaju VirtualPathProvider
Teraz wszystko działa poprawnie, z wyjątkiem sytuacji, gdy osadzone widoki zawierają odniesienia do typów w bibliotece DLL wtyczki. Potem się niesławny błąd (nazwy pominięta):
The type or namespace name '[Plugins]' does not exist in the namespace '[MyPluginSolution]' (are you missing an assembly reference?)
Powodem tego jest to, że kompilator csc która wywoływana jest czas pracy do kompilacji poglądy brzytwa tylko dostać odniesienia dll z folderu bin i GAC.
Próbowałem również wstępnego kompilowania widoków przy użyciu this technique, ale w końcu daje takie same wyniki, ponieważ środowisko wykonawcze nalega na kompilowanie opakowania dla wstępnie skompilowanego widoku maszynki.
Mógłbym oczywiście upuść DLL wtyczek w katalogu/bin, ale moje pytanie brzmi:
Czy istnieje sposób, aby zarejestrować bibliotek DLL w non-bin (i non-GAC) folder i leczyć jako "pierwszorzędni obywatele", aby mogli korzystać z widoków brzytwy?
Czy powodem, dla którego nie umieszczasz wtyczek w katalogu bin, jest to, że nie chcesz ponownie uruchomić aplikacji? to rozwiązanie ładuje tylko wtyczkę przy uruchamianiu aplikacji (BuildManager.AddReferencedAssembly) - czy dynamicznie można odwołać się do zespołu w katalogu dynamicDirectory? –
Powodem jest to, że to rozwiązanie może mieć potencjalnie dużą liczbę wtyczek, każda z 3-5 bibliotekami DLL. A ponieważ nie można ich umieścić w podfolderach w katalogu/bin, preferowanym rozwiązaniem byłoby użycie do tego innego folderu. – lasseschou