我正在重寫我公司的DAO庫。由於我們解決方案的特點,我們需要根據客戶切換ADO庫(Oracle/SQL Server)。 由於靜態引用是我們問題的主要來源(f.e.Oracle包來自CI而不是SQL Server)我決定採用插件體系結構,並嘗試動態加載所需的dll。Container中的寄存器布爾值
我是新來的簡單注射器(我使用Ninject,但在這種情況下,我們需要的東西,真的很快)。我使用了https://simpleinjector.readthedocs.org/en/latest/advanced.html#registering-plugins-dynamically文章,並設法將正確的dll加載到域中。
我貨櫃驗證(container.Verify())期間,我目前正面臨着一個奇怪的(在我看來)錯誤:
型GenericDAO的構造包含布爾類型的參數名爲「isInUserContext」沒有註冊。請確保布爾已註冊到容器中,或更改GenericDAO的構造函數。
我的構造看起來像這樣:
public class GenericDAO : DBHelper
{
public GenericDAO(Boolean isInUserContext, string connectionString, string providerName, UniversalDataAccess universalDataAccess)
: base(isInUserContext, connectionString, providerName, universalDataAccess)
{
}
我註冊:
var pluginDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugins");
var pluginAssemblies =
from file in new DirectoryInfo(pluginDirectory).GetFiles()
where file.Extension.ToLower() == ".dll"
select Assembly.LoadFile(file.FullName);
var pluginTypes =
from assembly in pluginAssemblies
from type in assembly.GetExportedTypes()
where typeof (IDBHelper).IsAssignableFrom(type)
where !type.IsAbstract
where !type.IsGenericTypeDefinition
select type;
_kernel.RegisterAll<IDBHelper>(pluginTypes);
你知道如何成功地初始化所有需要的類型? 我想揭示GenericDAO類型的公共屬性。
Steven,謝謝你的豐富解釋。我會用你的建議。你關於缺失抽象的建議很好,但我太盲目了,看不到它。現在它真的有道理。再次感謝你。 – 2014-11-24 16:50:42