Saya mencoba untuk mendapatkan Unity untuk mengelola pembuatan objek saya dan saya ingin memiliki beberapa parameter inisialisasi yang tidak diketahui hingga run-time:
Saat ini satu-satunya cara saya bisa memikirkan cara untuk melakukannya adalah dengan memiliki metode Init pada antarmuka.
interface IMyIntf {
void Initialize(string runTimeParam);
string RunTimeParam { get; }
}
Kemudian untuk menggunakannya (dalam Unity) saya akan melakukan ini:
var IMyIntf = unityContainer.Resolve<IMyIntf>();
IMyIntf.Initialize("somevalue");
Dalam skenario ini runTimeParam
param ditentukan pada saat run-time berdasarkan input pengguna. Kasus sepele di sini hanya mengembalikan nilai runTimeParam
tetapi dalam kenyataannya parameter akan menjadi sesuatu seperti nama file dan metode inisialisasi akan melakukan sesuatu dengan file tersebut.
Ini menciptakan sejumlah masalah, yaitu bahwa Initialize
metode ini tersedia di antarmuka dan dapat dipanggil beberapa kali. Mengatur bendera dalam implementasi dan melempar pengecualian pada panggilan berulang untuk Initialize
tampaknya cara kikuk.
Pada titik di mana saya menyelesaikan antarmuka saya, saya tidak ingin tahu apa-apa tentang implementasi IMyIntf
. Apa yang saya inginkan, bagaimanapun, adalah pengetahuan bahwa antarmuka ini membutuhkan parameter inisialisasi satu kali tertentu. Apakah ada cara entah bagaimana menjelaskan (atribut?) Antarmuka dengan informasi ini dan meneruskannya ke kerangka kerja ketika objek dibuat?
Sunting: Menjelaskan antarmuka sedikit lebih.
runTimeParam
adalah ketergantungan yang ditentukan pada saat dijalankan berdasarkan input pengguna. Haruskah alternatif untuk ini membaginya menjadi dua antarmuka - satu untuk inisialisasi dan satu lagi untuk menyimpan nilai?