0

Shortbus の使用を開始しましたが、StructureMap.MVC5 パッケージと Shortbus の間で DLL のバージョン管理の問題が発生しています。Shortbus は StructureMap 2.6.3 を使用し、MVC5 パッケージは 2.6.3 を使用しています。

依存関係のリダイレクトを試みましたが、MajorVersion の変更により、Shortbus が問題を引き起こしています。

これはオープン ソース プロジェクトであるため、Shortbus を StructureMap のバージョン 3 にアップグレードすることにしました。

この古いコードの移動に行き詰まっています:

[Test]
public void StructureMapResolveSingleInstance()
{
    var registered = new Registered();

    ObjectFactory.Initialize(i => i.Register(registered));

    var resolver = new StructureMapDependencyResolver(ObjectFactory.Container);

    var resolved = (Registered) resolver.GetInstance(typeof (Registered));

    Assert.That(resolved, Is.EqualTo(registered));
}

..バージョン 3 へ。問題は Register にあり、ObjectFactory は現在廃止されていると見なされています。

この回答に従って、独自の ObjectFactory を作成する必要があると思います: https://stackoverflow.com/a/25551005/119624

そして、私自身のレジストリを含めます。途中でコードを手伝ってくれる人はいますか?

4

1 に答える 1

1

可能であればオブジェクト ファクトリを使用しないことを常にお勧めしますが、コンテナーへのアクセスが必要であり、コンストラクター インジェクションまたはプロパティ セッターのいずれかを介してコンテナーをインジェクトでき​​ない場合は、その仮定で正しいと思います。次善の策は、ObjectFactory の独自の実装を作成することです。

参照先のリンクは、独自の ObjectFactory を作成するための良い出発点です。ここから行う必要があるのは、StructureMap レジストリを次のように登録することだけです。

private static Container defaultContainer()
{
    return new Container(x =>
    {
        x.AddRegistry<WebsiteRegistry1>();
        x.AddRegistry<WebsiteRegistry2>();
     });
 }

Web サイトまたは Web アプリケーションを作成している場合 (ShortBus を使用している場合)、別のアプローチとして、HttpContextバインドされたネストされたコンテナーを使用します。ここで、各ページ リクエストのオブジェクト内に格納されるコンテナのネストされたバージョン (ネストされたコンテナの詳細についてはこちら) を作成します。HttpContextその後、静的インスタンスを使用してコンテナーのインスタンスを返すことができます。

これがどのように行われるかを確認するには、Jimmy Bogard の ContosoUniversity rewrite here を参照することをお勧めします。

public class StructureMapValidatorFactory : ValidatorFactoryBase
{
    public override IValidator CreateInstance(Type validatorType)
    {
        return StructuremapMvc.ParentScope.CurrentNestedContainer.TryGetInstance(validatorType) as IValidator;
    }
}

このような使用法のためのセットアップは、ここここで見ることができます。

これが役立つことを願っています。これに関してご不明な点がございましたら、できる限りお答えいたします。

補足: ShortBus を使用している場合は、 Mediatr も参照することをお勧めします。これは ShortBus をベースにしていますが、いくつかの機能が追加され、ドキュメントが大幅に改善されています。

于 2015-07-05T00:06:36.743 に答える