2015-01-30 20 views
11

described here ile aynı sorunu yaşıyorum ve kurulum şu anda olan ve neredeyse identical to this temel alınmıştır. Benim denetleyicisi bir yönteme erişmek zaman tip 'TestController' bir denetleyicisi oluşturmaya çalışırken buWeb API ve OWIN'de Basit Enjektör'ü Kullanma

bir hata oluştu olsun. Denetleyicinin parametre olmayan bir kamu yapıcısına sahip olduğundan emin olun. İşte

yığın izleme

at System.Web.Http.Dispatcher.DefaultHttpControllerActivator 
    .Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, 
    Type controllerType)\r\n 
at System.Web.Http.Controllers.HttpControllerDescriptor 
    .CreateController(HttpRequestMessage request)\r\n 
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext() 

var Ve burada Buradaki iç istisnanın yığın izleme

at System.Linq.Expressions.Expression.New(Type type)\r\n 
at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType)\r\n 
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator 
    .GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator)\r\n 
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator 
    .Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) 

var benim denetleyicisi

public class TestController : ApiController 
{ 
    private readonly ITestRepo _repo; 
    public TestController(ITestRepo repo) 
    { 
     _repo = repo; 
    } 

    public IEnumerable<string> Get() 
    { 
     return new string[] { "value1", "value2" }; 
    } 

    public string Get(int id) 
    { 
     return _repo.GetId(id); 
    } 
} 

gibi görünür Ve burada şu şekilde ayarlayabilirsiniz Basit Enjektör

+0

http://blog.ploeh.dk/2012/09/28/DependencyInjectionandLifetimeManagementwithASP.NETWebAPI/ – Aron

+1

yığın iz itibaren görünüyor Basit Enjektör, denetleyicileri çözümlerken * dahil değildir. GlobalConfiguration.Configuration.DependencyResolver' değerinin çalışma zamanında olup olmadığını kontrol edin. Muhtemelen bir yerde sıfırlanıyor. Bunun nerede olduğunu öğrenmelisin. Belki de "WebApiConfig.Register" veya "app.UseWebApi" yöntemlerinde? – Steven

+0

"container.Verify" çağrıldığında, denetleyicilerin her birinin vurulduğu için "karışıyor" diye düşünüyorum. Doğru anlamış olsaydım, "Doğrula" budur. –

cevap

19

UnityDependencyResolver ile aynı sorunu yaşadım. Ama bence SimpleInjectorWebApiDependencyResolver için de çalışmalı. (Bir Mülkiyet HttpConfiguration gibi) bu gibi çözümleyicinizi kayıt deneyin:

public void Configuration(IAppBuilder app) 
{ 
    var container = GetContainer(); // Initialise container 

    HttpConfiguration config = new HttpConfiguration 
    { 
     DependencyResolver = new SimpleInjectorWebApiDependencyResolver(container); 
    }; 

    WebApiConfig.Register(config); 
    app.UseWebApi(config); 
} 
+0

Sweet! Teşekkürler! Bu sorunu nasıl çözdü? Bunu açıklayan bir blog var mı (eğer varsa harika). –

+1

@vonv. Sizin gibi farklı bloglarda da çözüm bulmaya çalıştım, çünkü aynı sorunla karşılaştı, ama sonunda asp.net blogunda Mike Wasson'ın bağımlılık çözümleyicisini global HttpConfiguration nesnesinin DependencyResolver özelliğine ayarladığını fark ettim: http: // www .asp.net/web-api/genel bakış/gelişmiş/bağımlılık-enjeksiyon –

+0

Mantıklı olun, tekrar teşekkürler. –