3

SignalR 0.5.2を使用していて、Unityを使用してDependencyResolverをセットアップしようとしています。私はできる限り簡単なコードを書きました。注入しようとしているハブがあり、次のようになります。

public class SimpleHub : Hub
{
    private readonly ITestService _service;

    public SimpleHub(ITestService service)
    {
        _service = service;
    }

    public void Update()
    {
        Clients.callback("Kevin");
    }
}

および次のようなDependencyResolver:

public class UnityDependencyResolver : DefaultDependencyResolver
{
    private readonly IUnityContainer _container;

    public UnityDependencyResolver(IUnityContainer container)
    {
        _container = container;
    }

    public override object GetService(Type serviceType)
    {
        if (_container.IsRegistered(serviceType))
        {
            return _container.Resolve(serviceType);
        }
        return base.GetService(serviceType);
    }

    public override IEnumerable<object> GetServices(Type serviceType)
    {
        if (_container.IsRegistered(serviceType))
        {
            return _container.ResolveAll(serviceType);
        }
        return base.GetServices(serviceType);
    }
}

Global.asaxに依存関係リゾルバーを登録します

protected void Application_Start()
{
    IUnityContainer container = new UnityContainer();
    InitializeContainer(container);
    SignalR.IDependencyResolver resolver = new UnityDependencyResolver(container);
    GlobalHost.DependencyResolver = resolver;
    RouteTable.Routes.MapHubs();
    // more MVC stuff here
}

ここで、InitializeContainerはUnityにITestServiceを登録します

リゾルバーは、すべてのSignalRタイプに対して呼び出されるという点で「機能」します。ハブをデフォルトのコンストラクターのままにすると、すべてが読み込まれます。ただし、リゾルバーはITestServiceインターフェースを解決するように求められることはありません。

また、リゾルバーをMapHubsに渡してみましたが、まだ運がありません。[Dependency]属性を使用してプロパティインジェクションも試しましたが、それも機能しませんでした。

リゾルバーもMVCに登録する必要がありますか?(両方のIDependecyResolverインターフェイスを実装して試しましたが、リゾルバーがIServiceLocatorを実装していないことを示す例外が発生します)

4

2 に答える 2

2

だから私はこれを修正しました。ハブがSignalerコンテナーに登録され、インターフェイスがUnityコンテナーに登録されていることが、問題の原因であるかどうか疑問に思いました。そこで、HubをUnityに登録すると、すべてが機能します。

コンテナが2つあるので、この種の意味があります。

これは標準的な動作ですか?

于 2012-07-07T16:06:57.393 に答える
1

他の誰かが疑問に思っている場合に備えて...私は使用する良いSPAの例を見つけました

  • SignalR 1.0.1
  • Unity 3
  • 他のフレームワークの束

興味深いのは、彼がコンテナを作成する方法、依存関係、その他すべてです。それをチェックする価値があります。

于 2013-09-06T13:00:26.200 に答える