Gunakan layanan di kelas MVC dengan Unity Ioc

Saya punya aplikasi MVC menggunakan Unity Ioc.

Deklarasikan dan mulai layanan:

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;
}

Di kelas saya menggunakan kode di bawah ini:

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

Ini adalah file UnityControllerFactory.cs

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

Saat saya menjalankan aplikasi, aplikasi mengembalikan kesalahan di: HttpContext.Current.Items[assemblyQualifiedName];

Kesalahan:

Informasi tambahan: Referensi objek tidak disetel ke instance objek.

Bagaimana saya bisa menggunakan layanan di kelas saya. Terima kasih!


person M.Peter    schedule 17.08.2016    source sumber
comment
Apakah hal yang sama terjadi jika Anda memasukkan layanan ke dalam konstruktor kelas?   -  person JB06    schedule 17.08.2016
comment
@ JB06 ketika saya menggunakan pengontrol, itu berfungsi dan tidak ada kesalahan. Hanya digunakan di kelas, akan error di atas   -  person M.Peter    schedule 17.08.2016


Jawaban (1)


masalahnya di sini adalah HTTPContext adalah null ketika digunakan dari kelas (atau perpustakaan kelas) seperti yang Anda coba lakukan. Itu karena tidak ada permintaan untuk diajak bekerja sama. Saat Anda menggunakannya dari pengontrol, semuanya berfungsi karena pengontrol dipukul sebagai bagian dari permintaan sehingga Anda senang di sana.

Anda dapat memperbarui kelas Pabrik UnityController dan meneruskan data HTTPContext yang diperlukan sebagai parameter, lalu Anda dapat menggunakannya saat diperlukan. Ini sedikit memperumit masalah.

Catatan, kemungkinan besar Anda tidak perlu meneruskan seluruh objek HTTPContext, cukup berikan jumlah minimum yang dapat Anda loloskan.

person Andrei Dragotoniu    schedule 17.08.2016
comment
Terima kasih @Andrei Dragotoniu. Maaf, tetapi saya tidak memahami pemecah masalah Anda, Anda dapat memberikan kode contoh kepada saya. - person M.Peter; 17.08.2016