1

このコードを考えると:

namespace Eisk.Controllers
{
    public class EmployeesController : Controller
    {
        DatabaseContext _dbContext;

        public EmployeesController(DatabaseContext databaseContext)
        {
            _dbContext = databaseContext;
        }

        public ViewResult Index()
        {
            var employees = _dbContext.EmployeeRepository;

            return View(employees.ToArray());
        }

コンストラクターはデータベースを新規作成しないことに注意してください。

単体テストからアクセスすると、databaseContext を注入でき、コントローラーはテスト中にそれを使用します。私が理解できないのは、このコードが実行時に使用しているデータベース コンテキストを取得している場所です。私がそれを見つけることができれば、その動作を回避する方法を見つけ出し、代わりにモック/インメモリ DB を使用させることができるかもしれません。

詳細説明: 現在、このアプリケーションのレガシー データベースにアクセスできないため、xml ファイルから入力されるインメモリ データ ソースをモックアップしようとしています。そのため、デフォルトのデータベース コンテキストの作成を回避できるようにする必要があります。

詳細情報: これまでのすべての助けに感謝します。素晴らしい人々です。

スティーブンは私を正しい道に導いたようです。Global.asax ファイルには、次の呼び出しがあります。

DependencyInjectorInitializer.Init();

それに続いて、次のコードを取得します。

        public static void Initialize()
    {
        _container = new UnityContainerFactory().CreateConfiguredContainer();     
        var serviceLocator = new UnityServiceLocator(_container);
        ServiceLocator.SetLocatorProvider(() => serviceLocator);
        DependencyResolver.SetResolver(new UnityDependencyResolver(_container));
    }

少なくともそれは私を正しい方向に向かわせます。ここで、Unity がどのようにコンテキストを作成しようとしているのかを理解して、介入できるようにする必要があります。

  • ここに EISK MVC Employee Info Starter Kit をプラグインさせてください。これは、Mohammad Ashraful Alam らによって開発されたよく考えられたシステムです。これには、いくつの新しいテクノロジーがうまく組み合わさっているかを示す十分な例が含まれています。MVC 5、Entity Framework 6、Unity、Authentication、OpenAuth、DI、Moq、その他いくつか。テンプレート、一般的な学習、またはトレーニングとして使用できます。 従業員情報スターター キット
4

1 に答える 1

3

ASP.NET MVC の既定の構成では、コントローラーには既定のコンストラクター (つまり、パラメーターのないパブリック コンストラクター) が必要です。そうでない場合、ASP.NET MVC は次の例外をスローします。

タイプ「Eisk.Controllers.EmployeesController」にはデフォルトのコンストラクターがありません

ただし、これが機能する場合、これは、あなた (または別の開発者) が customIControllerFactoryまたは customを使用してデフォルト構成を上書きしたことを意味しますIDependencyResolver。ほとんどの開発者は、オープン ソースの依存性注入ライブラリ (Simple Injector、Autofac、Castle Windsor など) を使用してこれを行います。このようなライブラリの NuGet MVC 統合パッケージを取り込むと、通常、この構成が自動的に行われます。したがって、チームの誰かがあなたのためにこれを行った可能性があります。

私のアドバイスは次のとおりです。あなたのチームと話し、彼らがこれをどのように行ったか、どのコンテナを使用したか、その構成をどこで見つけることができるかを尋ねてください。

于 2014-11-27T09:10:26.183 に答える