Skip to content

Commit

Permalink
corrected bugs in ninject dependency resolver
Browse files Browse the repository at this point in the history
  • Loading branch information
howarddierking committed Jun 2, 2012
1 parent cf27172 commit 1bff73a
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 16 deletions.
Expand Up @@ -79,7 +79,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\RestBugs.Services\RestBugs.Services.csproj">
<Project>{1FE6F881-2365-418C-AD5C-ED987F07F393}</Project>
<Project>{1fe6f881-2365-418c-ad5c-ed987f07f393}</Project>
<Name>RestBugs.Services</Name>
</ProjectReference>
</ItemGroup>
Expand Down
Expand Up @@ -39,9 +39,12 @@ static void WriteStream(object value, Stream stream)
currentTemplate.Model = value;
currentTemplate.Execute();

using (var streamWriter = new StreamWriter(stream))
streamWriter.Write(currentTemplate.Buffer.ToString());

//using (var streamWriter = new StreamWriter(stream)) {
var streamWriter = new StreamWriter(stream);
streamWriter.Write(currentTemplate.Buffer.ToString());
streamWriter.Flush();
//}

currentTemplate.Buffer.Clear();
}

Expand Down
Expand Up @@ -4,36 +4,57 @@
using System.Text;
using System.Web.Http.Dependencies;
using Ninject;
using Ninject.Syntax;

namespace RestBugs.Services.Infrastructure
{
class NinjectDependencyResolver : IDependencyResolver
public class NinjectDependencyScope : IDependencyScope
{
private KernelBase _kernel;
private IResolutionRoot resolver;

public NinjectDependencyResolver(KernelBase kernel)
internal NinjectDependencyScope(IResolutionRoot resolver)
{
_kernel = kernel;
this.resolver = resolver;
}

public IDependencyScope BeginScope()
public void Dispose()
{
throw new NotImplementedException();
IDisposable disposable = resolver as IDisposable;
if (disposable != null)
disposable.Dispose();

resolver = null;
}

public object GetService(Type serviceType)
{
return _kernel.TryGet(serviceType);
if (resolver == null)
throw new ObjectDisposedException("this", "This scope has already been disposed");

return resolver.TryGet(serviceType);
}

public IEnumerable<object> GetServices(Type serviceType)
{
return _kernel.GetAll(serviceType);
if (resolver == null)
throw new ObjectDisposedException("this", "This scope has already been disposed");

return resolver.GetAll(serviceType);
}
}

public void Dispose()
public class NinjectDependencyResolver : NinjectDependencyScope, IDependencyResolver
{
private IKernel _kernel;

public NinjectDependencyResolver(IKernel kernel) : base(kernel)
{
_kernel = kernel;
}

public IDependencyScope BeginScope()
{
throw new NotImplementedException();
return new NinjectDependencyScope(_kernel.BeginBlock());
}
}
}
Expand Up @@ -14,7 +14,7 @@ public static class ServiceConfiguration
config.Routes.MapHttpRoute("def", "bugs/{controller}", new {controller = "Index"});

config.Formatters.Add(new RazorHtmlMediaTypeFormatter());
config.MessageHandlers.Add(new EtagMessageHandler());
//config.MessageHandlers.Add(new EtagMessageHandler());

var kernel = new StandardKernel();
kernel.Bind<IBugRepository>().To<StaticBugRepository>();
Expand Down
Expand Up @@ -19,6 +19,11 @@ public class BacklogController : ApiController

public HttpResponseMessage Get() {
var response = Request.CreateResponse<IEnumerable<BugDTO>>(HttpStatusCode.OK, GetBacklogBugDtos());

var n = Configuration.Services.GetContentNegotiator();
var n_res = n.Negotiate(typeof(IEnumerable<BugDTO>), Request, Configuration.Formatters);


return response;
}

Expand Down
8 changes: 7 additions & 1 deletion aspnet webapi migration-toRC.txt
Expand Up @@ -26,4 +26,10 @@ I removed the code that threw an exception for 404 status codes and instead simp
looks like the signature changed on mediatypeformatter
protected override Task OnWriteToStreamAsync(Type type, object value, Stream stream, HttpContentHeaders contentHeaders, FormatterContext formatterContext, TransportContext transportContext)

once I changed my services to return HttpResponseMessage rather than HttpResponseMessage<T>, I also ended up needing to fix up all of my unit tests
once I changed my services to return HttpResponseMessage rather than HttpResponseMessage<T>, I also ended up needing to fix up all of my unit tests

major changes in dependency resolver - need to get additional guidance on what these were all about

looks like there was some bug in the way I was managing my stream/stream writer inside my razor formatter

still an issue with content negotiation - especially when the user agent is a browser. It seems to have something to do with how we handle wildcard values in the accept header

0 comments on commit 1bff73a

Please sign in to comment.