SORU
2 Mart 2012, Cuma


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
14 Mayıs 2012, PAZARTESİ


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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BuzzFeedVideo

    BuzzFeedVide

    10 AĞUSTOS 2011
  • Troy Hunt

    Troy Hunt

    29 EYLÜL 2011
  • xXGAMERrs_Xx

    xXGAMERrs_Xx

    31 Temmuz 2014