Move NancyOwinHost to core. #1544

Merged
merged 5 commits into from Jun 11, 2014

Projects

None yet

7 participants

@khellang
Member

I think it's time we address this and start a discussion on how to structure/package things moving forward, and what better way to do that than with a pull request? πŸ˜‰

This PR renamesNancyOwinHost to NancyMiddleware and moves it to the core project, (still) under the Nancy.Owin namespace.
The AppBuilderExtensions are left intact in the Nancy.Owin project. API-wise, this is not even a breaking change πŸ‘

I also added extensions for the Action<Func<AppFunc, AppFunc>> approach for adding middleware, used in the new IBuilder.UseOwin extensions. This means that you can now do

public void Configure(IBuilder app)
{
    app.UseOwin(owin => owin.UseNancy());
}

in ASP.NET vNext, without other dependencies than core Nancy πŸ‘―

Fixes #1387

@jchannon jchannon and 3 others commented on an outdated diff May 25, 2014
src/Nancy/Owin/DelegateExtensions.cs
@@ -0,0 +1,48 @@
+using System;
@jchannon
jchannon May 25, 2014 Member

Put usings under the namspaces declaration human stylecop strike

@grumpydev
grumpydev May 25, 2014 Member

zOMG! Good job @thecodejunkie isn't watching!

image

@khellang
khellang May 25, 2014 Member

Problem is then you have to declare the Funcs with full names, e.g.

using AppFunc = System.Func<System.Collections.Generic.IDictionary<string, object>, System.Threading.Tasks.Task>

So I think it's worth the tradeoff (what is the tradeoff, exactly? 😝)...

@grumpydev
grumpydev May 25, 2014 Member

Tbh, the funcs in owin are so much smaller these days I'm not sure I see the point in aliasing them.

@grumpydev
grumpydev May 25, 2014 Member

And the tradeoff is that putting them inside the namespace scopes them correctly, which can avoid issues with namespace collisions.. on the flip side, putting them outside of the namespace gets you stabbed in the belly by @thecodejunkie, who will grow a Sparta-eque beard just for the occasion.

Swings and roundabouts really.

@khellang
khellang May 28, 2014 Member

the funcs in owin are so much smaller these days I'm not sure I see the point in aliasing them.

It looks a bit nicer with

UseNancy(this Action<MiddlewareFunc>)

than

UseNancy(this Action<Func<IDictionary<string, object>, Task>, Func<IDictionary<string, object>, Task>>)

πŸ˜‰

@damianh
damianh May 28, 2014 Member

The latter is what turns up in intellisense though.
On 28 May 2014 09:26, "Kristian Hellang" notifications@github.com wrote:

In src/Nancy/Owin/DelegateExtensions.cs:

@@ -0,0 +1,48 @@
+ο»Ώusing System;

the funcs in owin are so much smaller these days I'm not sure I see the
point in aliasing them.

It looks a bit nicer with

UseNancy(this Action)

than

UseNancy(this Action<Func<IDictionary<string, object>, Task>, Func<IDictionary<string, object>, Task>>)

[image: πŸ˜‰]

β€”
Reply to this email directly or view it on GitHubhttps://github.com/NancyFx/Nancy/pull/1544/files#r13118572
.

@khellang
khellang May 28, 2014 Member

I agree it looks fugly, but who cares about the signature anyway? As long as you get the extension methods πŸ˜„ This problem could probably be solved with your proposed global alias?

@damianh
damianh May 28, 2014 Member

Probably not - aliases are only good within a project. AssemblyNeutral delegates would be nice though (if that even makes sense)

@damianh
damianh Jun 11, 2014 Member

In the name of consistency, which I value more, +1 for putting them inside the namespace scope. I do this and live with it.

@grumpydev
Member

Something is very wrong with this PR.. it's from @khellang and Travis has actually built without errors :shipit:

@jchannon
Member

Its Sunday, Travis takes the day off

@khellang
Member

lol. yeah, crazy! I just popped a 🍺 to celebrate! πŸ˜‰

@jchannon
Member

Reckon we could get this in 0.23?

@grumpydev
Member

Could do.. tbh the most important part is probably obsoleting the old extension method, although I am still not sure what the message should be.

There is value in having the owin stuff in core though I suppose.

@grumpydev grumpydev added this to the 0.23 milestone May 25, 2014
@damianh damianh commented on the diff May 27, 2014
src/Nancy/Owin/DelegateExtensions.cs
+ using MiddlewareFunc = Func<
+ Func<IDictionary<string, object>, Task>,
+ Func<IDictionary<string, object>, Task>>;
+
+ /// <summary>
+ /// OWIN extensions for the delegate-based approach.
+ /// </summary>
+ public static class DelegateExtensions
+ {
+ /// <summary>
+ /// Adds Nancy to the OWIN pipeline.
+ /// </summary>
+ /// <param name="builder">The application builder delegate.</param>
+ /// <param name="action">A configuration builder action.</param>
+ /// <returns>The application builder delegate.</returns>
+ public static Action<MiddlewareFunc> UseNancy(this Action<MiddlewareFunc> builder, Action<NancyOptions> action)
@damianh
damianh May 27, 2014 Member

The suggested builder signature is Action<IDictionary<string, object>, MidFunc> ... which isn't even a proposal yet.

@khellang
khellang May 27, 2014 Member

Say what? No one's said this was BuildFunc. I assume you're hinting at the name? Do you have a suggestion?

@damianh
damianh Jun 11, 2014 Member

Right, ignore moi

@damianh
Member
damianh commented May 28, 2014

Keep Nancy.Owin - IAppBuilder and owin.dll will be around for some time yet.

+1 to moving NancyOwinHost to core. Though I'd rename it to NancyMiddleware myself, because Owin Hosts are things like Nowin, HttpListener etc.

@thecodejunkie thecodejunkie modified the milestone: 0.24, 0.23 Jun 4, 2014
@grumpydev grumpydev modified the milestone: Future, 0.24 Jun 10, 2014
@khellang
Member

And NancyMiddleware was born ✨

@damianh damianh modified the milestone: 1.0Alpha, Future Jun 11, 2014
@damianh damianh self-assigned this Jun 11, 2014
@damianh
Member
damianh commented Jun 11, 2014

After we get some consensus on the using declarations, I'll pull it in! (sooo excited, I pee'd a little)

@grumpydev
Member

Move em inside :)

@khellang
Member

Done... mmm, so much better. not πŸ˜‰

@jchannon jchannon and 1 other commented on an outdated diff Jun 11, 2014
src/Nancy/Owin/NancyMiddleware.cs
@@ -16,7 +16,7 @@
/// <summary>
/// Nancy host for OWIN hosts
@jchannon
jchannon Jun 11, 2014 Member

its not a host?? πŸ˜„

@khellang
khellang Jun 11, 2014 Member

Happy now? πŸ˜„

@damianh
Member
damianh commented Jun 11, 2014

wtf travis lol

@grumpydev
Member

Travis build failed.. be good to see if any @NancyFx/most-valued-minions can restart it.

@grumpydev
Member

Come on then @NancyFx/most-valued-minions .. who's going to tag this against the milestone and push the magic button? ;)

@jchannon
Member

I think @damianh has got his finger on the trigger

@damianh
Member
damianh commented Jun 11, 2014

I am primed.

@damianh damianh merged commit b871628 into NancyFx:master Jun 11, 2014

1 check passed

continuous-integration/travis-ci The Travis CI build passed
Details
@phillip-haydon
Member

We need to roll this back, merge was bad, I didn't approve... Clearly this isn't a team effort...

@damianh
Member
damianh commented Jun 11, 2014

It happened.

Image

@horsdal
Member
horsdal commented Jun 11, 2014

πŸ‘― 🍸

@khellang khellang deleted the khellang:owin branch Jun 11, 2014
@grumpydev grumpydev modified the milestone: 1.0 Alpha, 1.0 Feb 4, 2015
@khellang khellang restored the khellang:owin branch Feb 20, 2015
@khellang khellang deleted the khellang:owin branch Feb 20, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment