1

Web APIプロジェクトを開始し、それを通常のMVCプロジェクトにも拡張しました。これは、から派生したコントローラーとから派生したコントローラーがあることを意味ApiControllerControllerます。

これが私のDependencyResolverです:

public class StructureMapDependencyResolver :IDependencyResolver
{
    public IDependencyScope BeginScope()
    {
        return this;
    }

    public StructureMapDependencyResolver(IContainer container)
    {
        _container = container;
    }

    public object GetService(Type serviceType)
    {
        if (serviceType.IsAbstract || serviceType.IsInterface)
            return _container.TryGetInstance(serviceType);

        return _container.GetInstance(serviceType);
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        return _container.GetAllInstances<object>()
                         .Where(s => s.GetType() == serviceType);
    }

    private readonly IContainer _container;

    public void Dispose() { }
}

これが私のGlobal.asax.csです。

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

    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);

    ObjectFactory.Initialize(x =>
        {
            x.For<IDataService>().Use<MockDataService>();
        });
    ObjectFactory.Configure(x => x.Scan(scan =>
        {
            scan.AssembliesFromApplicationBaseDirectory();
            scan.LookForRegistries();
            scan.TheCallingAssembly();
            scan.WithDefaultConventions();
        }));

    var container = ObjectFactory.Container;
    GlobalConfiguration.Configuration.DependencyResolver = 
               new StructureMapDependencyResolver(container);
}

Web APIコントローラーは正常に機能していますが、派生したコントローラーでコンストラクターインジェクションを機能させることができませんController。もちろん、これは通常のNo parameterless constructor defined for this objectエラーメッセージです。

私はここで少し途方に暮れています...これはWebAPIへの私の最初の進出なので、どこが間違っているのかわかりません。

4

1 に答える 1

2

DependencyResolver.SetResolverをMVCIOCコンテナーに呼び出す必要があります。コンテナがMVCのIDependencyResolverも実装していることを確認してください。実装していないと、MVCでは機能しません。

于 2012-09-17T07:43:48.657 に答える