0

StructureMap for DIを使用していますが、MVC3カスタムベースコントローラーが正しくインスタンス化されないという問題があります。IAuctionCmsServicesのインスタンスが渡される代わりに、nullが発生します。

私のコントローラー:

public class BaseController : Controller
{
    public IAuctionCmsServices AuctionCmsServices;

    public BaseController()
        : this(null)        <--- is this the problem?
    {

    }

    public BaseController(IAuctionCmsServices auctionCmsServices)
    {
        this.AuctionCmsServices = auctionCmsServices;
    }
}

public class HomeController : BaseController
{
    public ActionResult Index()
    {
        return View);
    }
}

StructureMapコード:

public class StructureMapContainer : IDependencyResolver
{
    static IContainer _container;

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

    public object GetService(Type serviceType)
    {
        if (serviceType.IsAbstract || serviceType.IsInterface)
        {
            return _container.TryGetInstance(serviceType);
        }
        else
        {
            System.Diagnostics.Debug.WriteLine(_container.WhatDoIHave());
            return _container.GetInstance(serviceType);
        }
    }

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

public class ApplicationRegistry : Registry
{
    public ApplicationRegistry()
    {
        For<IAuctionCmsServices>().HybridHttpOrThreadLocalScoped().Use<AuctionCmsServices>();
    }
}

global.asax.cs:

DependencyResolver.SetResolver(new StructureMapContainer(container));

BaseControllerのコンストラクターが呼び出されると、IAuctionCmsServicesパラメーターはnullになります。this(null)をコンストラクターから削除しても、nullが発生します。

おそらく、BaseControllerのパラメーターなしのコンストラクターが正しく記述されていませんか?IAuctionCmsServicesを手動で解決すると、機能します。これは、IAuctionCmsServicesが正しく登録されているが、挿入されていないことを意味します。

4

1 に答える 1

0

サンプルからコンストラクターHomeControllerを除外しましたか、それとも持っていませんか?

私はStructureMapにあまり詳しくないので、ILで魔法をかけない限り、プロパティを受け入れるコンストラクターがない場合、プロパティはどのようにHomeControllerに注入されるのでしょうか。

IE

public HomeController(IAuctionCmsServices auctionCmsServices)
 : base(auctionCmsServices)
{}

Imが密集しているか、何かが足りない場合はお詫びします。

于 2012-04-10T19:38:43.850 に答える