Olamaz ASP.NET Web Bağımlılıkları API Denetleyicisi Enjekte Birlik kullanarak
Herhangi bir başarı IoC konteynerine kullanarak ASP.NET WebAPİ denetleyicileri içine bağımlılıkları enjekte etmeye çalışan var. Ben çalışamaz almak gibi görünüyor.
Bu şu an yaptığım şey.
global.ascx.cs: benim
public static void RegisterRoutes(RouteCollection routes)
{
// code intentionally omitted
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
IUnityContainer container = BuildUnityContainer();
System.Web.Http.GlobalConfiguration.Configuration.ServiceResolver.SetResolver(
t =>
{
try
{
return container.Resolve(t);
}
catch (ResolutionFailedException)
{
return null;
}
},
t =>
{
try
{
return container.ResolveAll(t);
}
catch (ResolutionFailedException)
{
return new System.Collections.Generic.List<object>();
}
});
System.Web.Mvc.ControllerBuilder.Current.SetControllerFactory(new UnityControllerFactory(container));
BundleTable.Bundles.RegisterTemplateBundles();
}
private static IUnityContainer BuildUnityContainer()
{
var container = new UnityContainer().LoadConfiguration();
return container;
}
Kumanda benim fabrika:
public class UnityControllerFactory : DefaultControllerFactory
{
private IUnityContainer _container;
public UnityControllerFactory(IUnityContainer container)
{
_container = container;
}
public override IController CreateController(System.Web.Routing.RequestContext requestContext,
string controllerName)
{
Type controllerType = base.GetControllerType(requestContext, controllerName);
return (IController)_container.Resolve(controllerType);
}
}
Asla birlik dosyamda bağımlılıkları gidermek için bakmak gibi görünüyor, ve gibi bir hata alıyorum:
Bir hata türü bir denetleyicisi oluşturmak için çalışıyorum oluştu 'PersonalShopper.Hizmetleri.WebApi.Denetleyicileri.'.ShoppingListController Denetleyici parametresiz bir genel oluşturucuya sahip olduğundan emin olun.
at Sistem.Web.Http.Dağıtıcısı.DefaultHttpControllerActivator.(HttpControllerContext Oluşturun controllerContext Yazın controllerType) Sistem.Web.Http.Dağıtıcısı.DefaultHttpControllerFactory.(HttpControllerContext Createınstance controllerContext, HttpControllerDescriptor controllerDescriptor) Sistem.Web.Http.Dağıtıcısı.DefaultHttpControllerFactory.(HttpControllerContext CreateController controllerContext, String controllerName) Sistem.Web.Http.Dağıtıcısı.HttpControllerDispatcher.(HttpRequestMessage SendAsyncİnternal istek, CancellationToken cancellationToken) Sistem.Web.Http.Dağıtıcısı.HttpControllerDispatcher.(HttpRequestMessage SendAsync istek, CancellationToken cancellationToken)
Denetleyicisi gibi görünüyor:
public class ShoppingListController : System.Web.Http.ApiController
{
private Repositories.IProductListRepository _ProductListRepository;
public ShoppingListController(Repositories.IUserRepository userRepository,
Repositories.IProductListRepository productListRepository)
{
_ProductListRepository = productListRepository;
}
}
Birlik dosyamı gibi görünüyor:
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<container>
<register type="PersonalShopper.Repositories.IProductListRepository, PersonalShopper.Repositories" mapTo="PersonalShopper.Implementations.MongoRepositories.ProductListRepository, PersonalShopper.Implementations" />
</container>
</unity>
Denetleyici fabrika bağımlılıkları çözülmesi gereken rakam olur denetleyicisi, mvc önceki sürümleri, çünkü kendisi için bir kayıt yok unutmayın.
Denetleyicisi fabrikamı hiç çağrıldığını gibi görünüyor.
CEVAP
Düzgün çalıştığını daha iyi bir çözüm var
http://www.asp.net/web-api/overview/extensibility/using-the-web-api-dependency-resolver

Nasıl bağımlılıkları Maven kullanarak ...
Chrome Uzantısı bina - İçerik sayfası ...
Etmesinin önünü olamaz'kilitlenmi...
't kopya başvuruları (DLL) eğer ç...
Programlama yoluyla ilk görünüm denetl...