Coder Social home page Coder Social logo

camilohe / addfeaturefolders Goto Github PK

View Code? Open in Web Editor NEW

This project forked from odetocode/addfeaturefolders

0.0 1.0 0.0 56 KB

Enable feature folders for MVC controllers and views in ASP.NET Core

License: MIT License

PowerShell 5.05% C# 94.95%

addfeaturefolders's Introduction

AddFeatureFolders

Build status

Installation

    Install-Package OdeToCode.AddFeatureFolders 

Usage

    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc()
                    .AddFeatureFolders();

            // "Features" is the default feature folder root. To override, pass along 
            // a new FeatureFolderOptions object with a different FeatureFolderName
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            app.UseDeveloperExceptionPage();
            app.UseMvcWithDefaultRoute();
        }
    }    

Now you can organize controllers and views in a Features folder hierarchy

See the sample folder for more examples.

\Features \Home \HomeController.cs \HomeViewModel.cs \HomeIndexHandler.cs \HomeIndexQuery.cs \Index.cshtml

Important!

AddFeatureFolders uses the namespace of the controller to figure out where the views are. For example:

/Features
	/Robots
		/Robots.cshtml

The above example folder structure relies on the namespace of the controller being <whatever>.Features.Robots.

If you encounter problems with MVC locating the views, check your controller namespace.

Disclaimer

Your feature folder name (FeatureFolderOptions.FeatureFolderName or AreaFeatureFolderOptions.AreaFolderName if using Areas) cannot be in your project namespace.

See: Issue #27

Using areas

If you want to enable areas, there are two pieces of code to add:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
                .AddFeatureFolders()
                .AddAreaFeatureFolders();
    
        // "Features" is the default feature folder root. To override, pass along 
        // a new FeatureFolderOptions object with a different FeatureFolderName
    }
    
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        app.UseDeveloperExceptionPage();
        app.UseMvcWithDefaultRoute().UseMvc(routes => 
            routes.MapRoute(
                name: "areaRoute",
                template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"));
    }

The first piece is to add the .AddAreaFeaturesFolders() after the .AddFeatureFolders(). This adds the view locations for the areas. The second part is another .UseMvc() method to configure the route to area controllers.

Now areas can be added using the default area layout combined with the feature folder setup. Example:

/Areas
    /Administration // this is the area name
        /Overview   // this is the controller name
            /OverviewController.cs
            /Index.cshtml

If ReSharper (or Rider) is being annoying

Then add the package JetBrains.Annotations to the web app project and add the following lines above the Startup class between the using statements and the namespace.

[assembly: AspMvcViewLocationFormat(@"~\Features\{1}\{0}.cshtml")]
[assembly: AspMvcViewLocationFormat(@"~\Features\{0}.cshtml")]
[assembly: AspMvcViewLocationFormat(@"~\Features\Shared\{0}.cshtml")]

[assembly: AspMvcAreaViewLocationFormat(@"~\Areas\{2}\{1}\{0}.cshtml")]
[assembly: AspMvcAreaViewLocationFormat(@"~\Areas\{2}\Features\{1}\{0}.cshtml")]
[assembly: AspMvcAreaViewLocationFormat(@"~\Areas\{2}\{0}.cshtml")]
[assembly: AspMvcAreaViewLocationFormat(@"~\Areas\{2}\Shared\{0}.cshtml")]

Replace 'Features' and 'Areas' part if you set a custom folder name.

addfeaturefolders's People

Contributors

bitbonk avatar deralbertcom avatar dheindel avatar kenbonny avatar leastprivilege avatar odetocode avatar seangwright avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.