2016-08-17 10 views
0

私はアプリケーションMVCでUnity Iocを使用しています。クラスMVCのサービスをUnity Iocで使用する

宣言し、initサービス:クラスで

public static void Initialize() 
{ 
    IUnityContainer container = BuildUnityContainer(); 
    DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 
} 
private static IUnityContainer BuildUnityContainer() 
{ 
    IUnityContainer container = new UnityContainer(); 
    container.RegisterType<ImyService, myService>(new HttpContextLifetimeManager<ImyService>());; 
    return container; 
} 

私は怒鳴るのコードを使用します。

var service = DependencyResolver.Current.GetService<ImyService>(); 

これは私がアプリケーションを実行する場合UnityControllerFactory.cs

public override object GetValue() 
{ 
    var assemblyQualifiedName = typeof(T).AssemblyQualifiedName; 
    if (assemblyQualifiedName != null) 
     return HttpContext.Current.Items[assemblyQualifiedName]; 
    return null; 
} 

ファイルです、次のところでエラーを返します。HttpContex t.Current.Items [assemblyQualifiedName];

エラー:

Additional information: Object reference not set to an instance of an object.

私は私のクラスでサービスを使用してすることができますどのように。ありがとう!

+0

サービスをクラスコンストラクタに挿入すると同じことが起こりますか? – JB06

+0

@ JB06私がコントローラで使用するとき、それは動作し、何のエラーもありません。クラスでのみ使用すると、以上のエラーになります –

答えて

0

ここでの問題は、あなたがしようとしているようなクラス(またはクラスライブラリ)からHTTPContextを使用するとnullになることです。これは、作業する必要がないためです。あなたがコントローラからそれを使用すると、コントローラがリクエストの一部としてヒットするので、すべてが機能します。

UnityController Factoryクラスを更新し、代わりに必要なHTTPContextデータをパラメータとして渡すことができます。必要なときに使用できます。しかし、それは少し複雑です。

HTTPContextオブジェクト全体を渡す必要はありません。離れていくことができる最小限度を渡すだけです。

+0

ありがとう@Andrei Dragotoniu。申し訳ありませんが、私はあなたのリゾルバを理解していない、あなたは私のためのサンプルコードを提供することができます。 –

関連する問題