コンフィグレーションされたASP.NET MVCとStructureMapを結びつける方法についてのいくつかのブログ記事があります。 (次のコードのほとんどは、さまざまな投稿の要約です)
これを行う一般的な方法は、独自のコントローラファクトリクラスを宣言することです。これにより、コンストラクタを介して依存関係を挿入できます。 (ASP.NET MVCが使用するデフォルトのコントローラファクトリでは、デフォルトのコンストラクタが必要です)
MyControllerクラスでは、MyManagerパラメータを受け入れるコンストラクタを使用しますコントローラファクトリクラス)
public class MyController : Controller
{
private readonly ISomeService _someService;
//Constructor Injection.
public MyController(ISomeService someService){
_someService = someService;
}
}
次あなたはASP.NET MVCを構成しますが)私たちはStructureMapControllerFactoryを呼ぶであろう(この新しいコントローラーファクトリクラスを使用して行います。 StructureMapControllerFactoryで
protected void Application_Start()
{
//This is where you register your concrete types with StructureMap
Bootstrapper.ConfigureStructureMap();
//Our very own Controller Factory
ControllerBuilder.Current.SetControllerFactory
(new StructureMapControllerFactory());
RegisterRoutes(RouteTable.Routes);
}
、私たちは私たち(私たちはすべての私達の依存関係を有線している提供)コントローラを返すあなたにObjectFactory.GetInstanceを呼び出す
public class StructureMapControllerFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(Type controllerType)
{
if (controllerType == null) return null;
try
{
return ObjectFactory.GetInstance(controllerType) as Controller;
}
catch (StructureMapException)
{
System.Diagnostics.Debug.WriteLine(ObjectFactory.WhatDoIHave());
throw;
}
}
}
うまくいけば、私の説明は明らかですが、あれば私に知らせてそれではなく、私はそれを拡張することができます。
ところで、以下のスニペットは、ブートストラップコードの例です。
public static class Bootstrapper
{
public static void ConfigureStructureMap()
{
ObjectFactory.Initialize(
x => x.AddRegistry(new MyApplicationRegistry()));
}
}
public class MyApplicationRegistry : Registry
{
public MyApplicationRegistry()
{
ForRequestedType<ISomeService>()
.CacheBy(InstanceScope.Your_Choice_Here)
.TheDefault.Is.OfConcreteType<SomeService>();
}
}
注:さまざまなInstanceScopeオプションについては、StructureMapのドキュメントを参照してください。あなたが自分でそれを
For<IBulkManager>()
.LifecycleIs(Lifecycles.GetLifecycle(InstanceScope.HttpSession))
.Use<BulkManager>();
を実装する必要はありませんので
おかげで男に変わるでしょう、あなたのオブジェクトのライフサイクルを制御することができます!コンストラクタ注入+ライフサイクル管理=これは私が必要なものです – IlliakaillI