Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Agatha and Ninject 3.0 #23

Closed
michaelaird opened this issue Apr 24, 2012 · 8 comments
Closed

Agatha and Ninject 3.0 #23

michaelaird opened this issue Apr 24, 2012 · 8 comments

Comments

@michaelaird
Copy link
Contributor

It looks like Ninject 3.0 has removed a method that the Agatha Ninject container relies on. When i try to run it, i get the following error:

[MissingMethodException: Method not found: 'Ninject.Syntax.IBindingToSyntax`1<System.Object> Ninject.Syntax.IBindingRoot.Bind(System.Type)'.]
Agatha.Ninject.Container.Register(Type componentType, Type implementationType, Lifestyle lifeStyle) in c:\src\agatha\Agatha.Ninject\Container.cs:23
Agatha.ServiceLayer.ServiceLayerConfiguration.RegisterRequestHandlerInterceptor() in c:\src\agatha\Agatha.ServiceLayer\ServiceLayerConfiguration.cs:190
Agatha.ServiceLayer.ServiceLayerAndClientConfiguration.RegisterRequestHandlerInterceptor() in c:\src\agatha\Agatha.ServiceLayer\ServiceLayerAndClientConfiguration.cs:108

Is there a work-around for this? or a planned update to support Ninject 3.0?

Thanks,
Michael.

@michaelaird
Copy link
Contributor Author

Also, it might be a good idea to republish the nuget packages with a version range to prevent people from updating ninject unknowingly.

@davybrion
Copy link
Owner

haven't really planned an update to NInject 3.0 yet... If you need it
urgently, I'd welcome a pull request :)

On Tue, Apr 24, 2012 at 9:56 PM, Michael Aird <
reply@reply.github.com

wrote:

It looks like Ninject 3.0 has removed a method that the Agatha Ninject
container relies on. When i try to run it, i get the following error:

[MissingMethodException: Method not found:
'Ninject.Syntax.IBindingToSyntax`1<System.Object>
Ninject.Syntax.IBindingRoot.Bind(System.Type)'.]
Agatha.Ninject.Container.Register(Type componentType, Type
implementationType, Lifestyle lifeStyle) in
c:\src\agatha\Agatha.Ninject\Container.cs:23

Agatha.ServiceLayer.ServiceLayerConfiguration.RegisterRequestHandlerInterceptor()
in c:\src\agatha\Agatha.ServiceLayer\ServiceLayerConfiguration.cs:190

Agatha.ServiceLayer.ServiceLayerAndClientConfiguration.RegisterRequestHandlerInterceptor()
in
c:\src\agatha\Agatha.ServiceLayer\ServiceLayerAndClientConfiguration.cs:108

Is there a work-around for this? or a planned update to support Ninject
3.0?

Thanks,
Michael.


Reply to this email directly or view it on GitHub:
#23

@michaelaird
Copy link
Contributor Author

Gotcha. I'll see if i can pull something together this week and submit a pull request.

@bartdeleye
Copy link
Collaborator

Upgraded nuget package to Ninject 3.0.0.15
All configuration tests succeed.
Which versions of Agatha/Ninject are you using?

@michaelaird
Copy link
Contributor Author

I'm using v1.3 from Nuget.

When I look at it in JustDecompile, the method looks like this:

public ServiceLayerConfiguration RegisterRequestHandlerInterceptor()
{
this.registeredInterceptors.Add(typeof(T));
this.container.Register(typeof(T), typeof(T), Lifestyle.Transient);
return this;
}

but in the current code it looks like this:
public ServiceLayerConfiguration RegisterRequestHandlerInterceptor() where T : IRequestHandlerInterceptor
{
registeredInterceptors.Add(typeof(T));
return this;
}

Did this get updated but the nuget package didn't?

@bartdeleye
Copy link
Collaborator

The registration part was moved in the version below, but the same signature is used to register the components.
I don't think it makes a difference in this case.
ba8566a#diff-0

@michaelaird
Copy link
Contributor Author

I think i found the culprit.

Ninject 3 changed the method signature in this commit: ninject/Ninject@83c8f53#diff-28

  •    /// <summary>
    

    30 50
    /// Declares a binding from the service to itself.
    31 51
    ///

    32

  •    /// <param name="service">The service to bind.</param>
    

    33

  •    IBindingToSyntax<object> Bind(Type service);
    

    52

  •    /// <param name="services">The services to bind.</param>
    

    53

  •    /// <returns>The fluent syntax.</returns>
    

    54

  •    IBindingToSyntax<object> Bind(params Type[] services);
    

from taking a single object to taking an array. recompiling against ninject 3 makes the compiler re-resolve the method call and everything works.

I could do a local build of Agatha to deal with this but I'd really prefer to use the "official" nuget packages.

Any chance you could publish an updated nuget package that has been compiled against ninject 3?

Thanks,
Michael.

@davybrion
Copy link
Owner

1.3.1 uses Ninject 3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants