无法构造接口

时间:2014-08-28 22:51:44

标签: c# asp.net dependency-injection

我已经陷入了一个有趣的境地,我很困惑,因为我觉得我在这里正在做所有正确的事情......我收到以下错误:

The current type, Services.Interfaces.IKenticoService, is an interface and cannot be constructed. Are you missing a type mapping?
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.InvalidOperationException: The current type, Services.Interfaces.IKenticoService, is an interface and cannot be constructed. Are you missing a type mapping?

Source Error:


Line 113:            throw new InvalidOperationException("Container on Global Application Class is Null. Cannot perform BuildUp.");
Line 114:
Line 115:        container.BuildUp(this as T);
Line 116:    }
Line 117:


Source File: c:\PROJECTS\CMS\CurentSprint\currentsprint\Source\WebProject\App_Code\Global\BasePage.cs    Line: 115

并且错误由基页生成:

protected override void OnPreInit(EventArgs e)
    {
        InjectDependencies();

        base.OnPreInit(e);
    }


/// <summary>
    /// This method is used to inject any controller related dependencies from
    /// our existing web page.
    /// </summary>
    protected virtual void InjectDependencies()
    {
        HttpContext context = HttpContext.Current;

        if (context == null)
            return;

        IContainerAccessor accessor = context.ApplicationInstance as IContainerAccessor;

        if (accessor == null)
            return;

        IUnityContainer container = accessor.Container;

        if (container == null)
            throw new InvalidOperationException("Container on Global Application Class is Null. Cannot perform BuildUp.");

        container.BuildUp(this as T);
    }

我有映射:

namespace Core.DI
{
    public static class UnityHelper
    {
        public static void ConfigureContainer(IUnityContainer container)
        {

            container.RegisterType<IPersonRegistrationService, PersonRegistrationService>();
            container.RegisterType<ILoginService, LoginService>();

            container.RegisterType<IKenticoCMSOfferService, KenticoCMSOfferService>();
            container.RegisterType<IKenticoService, KenticoService>();

            and then i have some other...
        }
    }
}

在侧面全局Application Start方法中调用此方法:

public void Application_Start(object sender, EventArgs e)
    {
        // Azure Application start init
        AzureInit.Current.ApplicationStartInit();

        CMSAppBase.CMSApplicationStart();

        //CustomCode: Added for DI (Unity block)
        try
        {
            //CustomCode: Create the unity container.
            Container = new UnityContainer();
            UnityHelper.ConfigureContainer(Container);

            //mappings
            EntityMapper.MapEntities();

        }
        catch (Exception ex)
        {
            //TODO: add call to error logger.
        }
    }

我的KenticoService类也正确设置:

namespace BusinessLogic.Services
{
    public class KenticoService : IKenticoService
    {


        #region User API Calls


        public void HandleCmsUser(Person person, string userName)
        {
            ...
        }


        public void HandleCmsUser(Person person, string userName, string oldUserName)
        {
            ...
        }

        #endregion




    }
}

现在只在LoginService和PersonRegistrationService内部调用kentico服务方法。所以在我所有的课程中都有:

[Dependency]
        public IKenticoService KenticoServiceInstance { get; set; }

现在我们有两个站点,我们的自定义MVC解决方案和CMS站点。上面引用的服务位于我们的MVC解决方案中的项目中。对于CMS使用,我们将dll复制到CMS解决方案。 MVC解决方案编译并运行良好。 CMS站点抛出此错误,我已经仔细检查过这里引用了正确的dll。你在这里看到的东西我可能会失踪吗?

0 个答案:

没有答案