2012-08-10 23 views
9

kullanılırken bu nesne istisnası için tanımlanmış hiçbir parametresiz kurucu yok, bir görünüm yüklemeye çalışırken yukarıdaki istisnayı alıyorum.Unity Container

Denetleyici örneğimi intialize etmek için Unity kullanıyorum. Hala yukarıdaki hatayı alıyorum.

İşte denetleyicim.

public class SiteController : Controller 
{ 

    private ISiteRepository _repository; 

    public SiteController(ISiteRepository repository) 
    { 
     _repository = repository; 
    } 

    // 
    // GET: /Site/ 

    public ActionResult Index() 
    { 
     return View(); 
    } 

    // 
    // GET: /Site/Details/5 

    public ActionResult Details(int id) 
    { 
     return View(); 
    }} 

Ve burada

protected void Application_Start() 
    { 
     ConfigApi(GlobalConfiguration.Configuration); 
     AreaRegistration.RegisterAllAreas(); 

     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
    } 

    static void ConfigApi(HttpConfiguration config) 
    { 
     var unity = new UnityContainer(); 
     unity.RegisterType<SiteController>(); 
     unity.RegisterType<ISiteRepository, SiteRepository>(new HierarchicalLifetimeManager()); 

     config.DependencyResolver = new IocContainer(unity); 
    } 

İşte benim SiteRepository sınıftır benim Global.asax.cs olduğunu.

public class SiteRepository:ISiteRepository 
{ 
    private readonly SampleMVCEntities _dbContext; 

    public SiteRepository() 
    { 
     _dbContext = new SampleMVCEntities(); 
    } 

    private IQueryable<SiteConfig> MapSiteConfig() 
    { 
     return _dbContext.SiteConfigs.Select(a => new SiteConfig 
     { 
      Name = a.Name, 
      LinkColour = a.LinkColour, 
      SiteLogo = a.SiteLogo, 
      SiteBrands = a.SiteBrands.Select(b => new Models.SiteBrand { SiteId = b.SiteId, BrandId = b.BrandId }) 
     }); 
    } 

    public IEnumerable<SiteConfig> GetAll() 
    { 
     return MapSiteConfig().AsEnumerable(); 
    }} 

Bu benim hata yığınım.

Bu nesne için tanımlı parametreler bulunmamıştır. Açıklama: Geçerli web isteğinin yürütülmesi sırasında işlenmeyen bir özel durum oluştu. Hata hakkında ve kodda nereden kaynaklandığı hakkında daha fazla bilgi için yığın izlemesini gözden geçirin.

Exception Details: System.MissingMethodException: No parameterless constructor defined for this object.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[MissingMethodException: No parameterless constructor defined for this object.] System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0
System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) +114
System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) +232 System.Activator.CreateInstance(Type type, Boolean nonPublic) +83 System.Activator.CreateInstance(Type type) +6 System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +55

[InvalidOperationException: An error occurred when trying to create a controller of type 'Config.Controllers.SiteController'. Make sure that the controller has a parameterless public constructor.]
System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +179
System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +80
System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +74
System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +197 System.Web.Mvc.<>c_DisplayClass6.b_2() +49 System.Web.Mvc.<>c__DisplayClassb 1.<ProcessInApplicationTrust>b__a() +13 System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22
System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Func
1 func) +88 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +98
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +50
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +268 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155


Biri bana yardım edebilir mi?

Teşekkürler.

+0

Sizin SiteController parametresiz yapıcı olması görünmüyor. Henüz bir tane eklemeyi denediniz mi? –

+0

Evet, parametresiz bir kurucu yok. Ve bağımlılığı enjekte ediyorum ve ayrıca özel DependencyResolver'ımı ayarlıyorum. – Naresh

cevap

15

ASP.NET MVC ve ASP.NET Web API'si , iki ayrı bağımlılık çözümleyicisi kullanır. Eğer kodda olduğu gibi GlobalConfiguration.Configuration.DependencyResolver kullanmak gerekir türemiştir formu ApiController olan Wep API denetleyicileri için

DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 

: Controller türetilmiştir olan "normal" MVC denetleyicileri için

Eğer DependencyResolver.SetResolver kullanmak gerekir.

Her iki denetleyiciyi de kullanmayı planlıyorsanız, kabınızı iki kez kaydettirmeniz gerekir.

hem bağımlılık Resolver için iyi bir makale nasıl ayarlanacağını Birlik yok:

Dependency Injection in ASP.NET MVC 4 and WebAPI using Unity

+0

Teşekkürler ...... Çalışıyor – Naresh