8

ダブルクリックコマンドを処理し、ユーザーにウィンドウをポップアップするメソッドを呼び出すコントローラークラスがあります。何かのようなもの :

var popup = container.GetService<PopupCommand>();

上記の行では、次のようなエラーがスローされます: 現在の型である PopupCommand.IPopupDataHandler はインターフェイスであり、構築できません。タイプマッピングがありませんか?

以前は正常に動作していた、container.GetService() のメソッドを含む DLL を更新しました。

Googleで検索してみましたが、同様の問題はUnityに関連しており、私の問題がUnityに関連しているかどうかは疑問です.

4

2 に答える 2

1

基本的に、コンパイラは、インターフェイスをインスタンス化しようとしていることを通知します。

container.GetService<PopupCommand>()おそらく、 という名前のインターフェースが返されPopupCommand.IPopupDataHandlerます。必要な型にキャストするか、型をオブジェクトに変更する必要があります。メソッドの制約も確認する必要がありnewます。制約が欠落している可能性があります。

于 2012-04-19T07:30:53.683 に答える
0

コントローラーを登録するために Addin DefaultController Factory を試してください。3 つのステップ:ステップ 1 1.プロジェクトにクラス DefaultControllerFactory を追加します。

public class ControllerFactory :DefaultControllerFactory
    {
        protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
        {
            try
            {
                if (controllerType == null)
                    throw new ArgumentNullException("controllerType");

                if (!typeof(IController).IsAssignableFrom(controllerType))
                    throw new ArgumentException(string.Format(
                        "Type requested is not a controller: {0}",
                        controllerType.Name),
                        "controllerType");

                return MvcUnityContainer.Container.Resolve(controllerType) as IController;
            }
            catch
            {
                return null;
            }

        }
        public static class MvcUnityContainer
        {
            public static UnityContainer Container { get; set; }
        }
    }

Step 2:BuildUnityContainerメソッドのBootstrapクラスに登録する

private static IUnityContainer BuildUnityContainer()
    {
      var container = new UnityContainer();

      // register all your components with the container here
      // it is NOT necessary to register your controllers

      // e.g. container.RegisterType<ITestService, TestService>();    
      //RegisterTypes(container);
      container = new UnityContainer();
      container.RegisterType<IProductRepository, ProductRepository>();


      UnityInterceptionExample.Models.ControllerFactory.MvcUnityContainer.Container = container;
      return container;
    }

ステップ 3: Global.asax ファイルに登録する

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterAuth();
            Bootstrapper.Initialise();
            ControllerBuilder.Current.SetControllerFactory(typeof(ControllerFactory));
        } 

そして終了。これでうまくいくかもしれません...ハッピーコーディング。

于 2016-02-05T14:09:12.657 に答える