依存注入容器AutofacとASP.NET MVC 3の統合
3663 ワード
まず、Visual Studio 2010のNuGetコンポーネント、MVCプロジェクトでAutofacに対するASPをインストールして追加することをお勧めします.NET MVC 3 Integrationコンポーネントの参照.具体的な操作は、「NuGetを使用してVisual Studioを管理するオープンソースコンポーネント(Package)」を参照してください.
上記ステップが完了する後、プロジェクトのGlobal.asaxファイルでは,Controllerへの依存注入を実施する.
Globalでasaxでは、次の2つのネーミングスペースの参照を追加する必要があります.
?
1
2
3
アプリケーション_Start()メソッドには、次のコードが追加されます.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
ここで、SetupResolveRules()は、InterfaceとClassの関連付けを確立するためにカスタマイズされた方法です.コードは次のとおりです.
?
1
2
3
4
5
6
7
8
9
10
11
ただし、プロジェクトに比較的多くのInterfaceとClassが関連付けを必要とする場合は、上記の点に1つずつ追加する必要があります.これにより、後期のメンテナンス作業が増加します.
次に、現在実行されているAssemblyのRepositoryで終わるClassを、実装されているInterfaceに関連付ける別の方法を提供します.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
上記コードのサンプルプログラム(ASP.NET MVC 3+Autofac)のダウンロードアドレス:
http://download.csdn.net/source/3234339
サンプル・プログラムの実行インタフェースは次のとおりです.
関連ドキュメントは、次のリンクを参照してください.
Integrating with ASP.NET MVC 3.0,http://code.google.com/p/autofac/wiki/Mvc3Integration
ASP.NET MVC 2開発実戦IoCコンテナ-Autofac、http://www.entlib.net/?p=23
上記ステップが完了する後、プロジェクトのGlobal.asaxファイルでは,Controllerへの依存注入を実施する.
Globalでasaxでは、次の2つのネーミングスペースの参照を追加する必要があります.
?
1
2
3
using
Autofac;
using
Autofac.Integration.Mvc;
アプリケーション_Start()メソッドには、次のコードが追加されます.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
protected
void
Application_Start()
{
var builder =
new
ContainerBuilder();
SetupResolveRules(builder);
// use a provided extension method to register all the controllers in an assembly
builder.RegisterControllers(Assembly.GetExecutingAssembly());
// create a new container with the component registrations
IContainer container = builder.Build();
// use the static DependencyResolver.SetResolver method
// to let ASP.NET MVC know that it should locate services
// using the AutofacDependencyResolver
DependencyResolver.SetResolver(
new
AutofacDependencyResolver(container));
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
ここで、SetupResolveRules()は、InterfaceとClassの関連付けを確立するためにカスタマイズされた方法です.コードは次のとおりです.
?
1
2
3
4
5
6
7
8
9
10
11
private
void
SetupResolveRules(ContainerBuilder builder)
{
//Components are wired to services using the As() methods on ContainerBuilder
builder.RegisterType().As();
builder.RegisterType().As();
}
ただし、プロジェクトに比較的多くのInterfaceとClassが関連付けを必要とする場合は、上記の点に1つずつ追加する必要があります.これにより、後期のメンテナンス作業が増加します.
次に、現在実行されているAssemblyのRepositoryで終わるClassを、実装されているInterfaceに関連付ける別の方法を提供します.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private
void
SetupResolveRules(ContainerBuilder builder)
{
// Speficy that a type from a scanned assembly is registered
// as providing all of its implementation interfaces.
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
.Where(t => t.Name.EndsWith(
"Repository"
))
.AsImplementedInterfaces();
}
上記コードのサンプルプログラム(ASP.NET MVC 3+Autofac)のダウンロードアドレス:
http://download.csdn.net/source/3234339
サンプル・プログラムの実行インタフェースは次のとおりです.
関連ドキュメントは、次のリンクを参照してください.
Integrating with ASP.NET MVC 3.0,http://code.google.com/p/autofac/wiki/Mvc3Integration
ASP.NET MVC 2開発実戦IoCコンテナ-Autofac、http://www.entlib.net/?p=23