こんにちは、助けてくれてありがとう。
MVC3 アプリケーションで Unity をどのように構築しているかについて質問があります。
現時点では、この便利なサンプル コードから Unity の実装をモデル化しました。
http://kevww.wordpress.com/2012/01/04/dependency-injection-with-unity-2-0-in-mvc-3/
私はそれをうまく動作させることができますが、少し異なるアプローチがあるかどうか自問しています. 基本的に、このソリューションは 2 つのクラスを必要とします。最初のクラスは依存関係リゾルバーです。
public class UnityDependencyResolver : IDependencyResolver
{
IUnityContainer _container;
public UnityDependencyResolver(IUnityContainer container)
{
_container = container;
}
public object GetService(Type serviceType)
{
object instance;
try
{
instance = _container.Resolve(serviceType);
if (serviceType.IsAbstract || serviceType.IsInterface)
{
return null;
}
return instance;
}
catch (Exception e)
{
return null;
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
return _container.ResolveAll(serviceType);
}
}
そして、Global.asax から呼び出されるセットアップを含む Unity コンテナー セットアップ クラス:
public class UnityContainerSetup
{
public static void SetUp()
{
var container = new UnityContainer();
container.RegisterType<ISomeService, SomeService>();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
}
}
では、私の質問です。この Unity 実装を実際に分離するより良い方法はありますか?
別のプロジェクトを作成し、その中に上記の 2 つのクラスを配置しました。System.Web.Mvc
その新しいプロジェクトで解決するために参照した後、それはうまくいきましたIDependencyResolver
。
ただし、同じリポジトリと DAL を使用する Web フォーム アプリケーションなど、別のものから Unity を使用するために共通アセンブリを再利用したい場合も、あまり意味がないように思えました。
それとも、これは Unity を機能させるために必要な単なる配管ですか? つまり、さまざまなプロジェクトで Unity の実装を変更した場合、それぞれのプロジェクトに順番にアクセスする必要がありますか? それとも、私のアプローチは中間の妥協点で問題ありませんか?
ここで私にとって明らかな問題はIDependencyResolver
、 が MVC の一部であることです。したがって、団結のための「共通の」アセンブリがMVCでどのように行われるかはわかりません。