NancyFxを使用するasp.netアプリケーションがあります。私は自分のデータベースのライセンスに基づいて特定のモジュールだけを登録したい。これは、モジュールが異なる構成に基づいて同じルートを持つためです。NancyFxは、特定のコードのみを登録します。
INancyModuleCatalogを実装するカスタムクラスを作成する必要があると思いました。
パブリッククラスCustomModuleCatalog:INancyModuleCatalog { private IDictionary _modules;
public CustomModuleCatalog()
{
// The license type is read from db in Global.ascx.
// So I want to register a module based on a namespace.
// The namespace is the same like the license name.
if(WebApiApplication.LicenseType == LicenseType.RouteOne)
{
var assemblyTypes = Assembly.GetExecutingAssembly().GetTypes();
var modules = assemblyTypes.Where(t => t.Namespace != null && t.Namespace.EndsWith(WebApiApplication.SystemType.ToString()));
var nancy = modules.Where(t => t.IsAssignableFrom(typeof(INancyModule)));
foreach (var type in nancy)
{
var nancyType = (INancyModule)type;
_modules.Add(type, (INancyModule)Activator.CreateInstance(type));
}
}
}
public IEnumerable<INancyModule> GetAllModules(NancyContext context)
{
return _modules?.Values;
}
public INancyModule GetModule(Type moduleType, NancyContext context)
{
if (_modules != null && _modules.ContainsKey(moduleType))
{
return _modules[moduleType];
}
return null;
}
}
どのように私のブートストラップでこのカタログを登録するには?
私はコンストラクタをどちらも呼びたくありませんでしたが、正直言って私はこの単純な解決方法を思いついたわけではありません:-) – Franki1986