我建立一個龐大的服務,並使用Ninjcet:動態綁定Ninject
Bind<IMyObject>().To<MyObject>();
因爲我的邏輯層是相當大的,而且會增長,我想一個組件內自動創建綁定,因爲該類實現一個接口。
public void LoadAssembly()
{
string[] files = Directory.GetFiles(binFolder, "Logic.dll", SearchOption.AllDirectories);
foreach (var file in files)
{
var fileName = Path.GetFileName(file);
if (fileName != null && fileName.Contains("Logic"))
{
DynamicallyBindManagers(Assembly.LoadFrom(file));
}
}
}
private void DynamicallyBindManagers(Assembly assembly)
{
var classes = FindClassesWithInterfacesInAssembly(assembly);
// Remove unwanted classes
for (var i = classes.Count - 1; i >= 0; i--)
{
if (classes[i].Name.Contains("`"))
{
classes.Remove(classes[i]);
}
}
foreach (var cl in classes)
{
var interfaces = cl.GetInterfaces();
foreach (var myInterface in interfaces)
{
if (classes.Any(c => c.Name == intf.Name.Remove(0, 1)))
{
var myClass = classes.First(c => c.Name == intf.Name.Remove(0, 1));
Bind<myInterface >().To<myClass>(); //How can I get Bind to accept myInterface & myClass
}
}
}
}
private List<Type> FindClassesWithInterfacesInAssembly(Assembly assembly)
{
var classes = new List<Type>();
foreach (var ti in assembly.GetTypes().Where(x => x.IsClass))
{
if (ti.GetInterfaces().Any())
{
classes.Add(ti);
}
}
return classes;
}
所有幫助表示讚賞。
請描述正是你需要什麼幫助。你是否遇到異常?代碼是否編譯並運行,但Ninject是否抱怨缺少綁定?等 –
我的問題是,我希望能夠,而不是必須手動把所有綁定例如結合()。爲了();我想找到實現接口的所有類,並綁定那些他們實現接口,由於接口具有相同的名稱類+ I.在上面我的演示,我有接口和從組件類,但我需要能夠添加使用那些在綁定<>()。 –
h3li0s
你應該看看'Ninject.Extensions.Conventions'命名空間 - 讓* *約定的延伸和你可以做什麼,我覺得你想要做的:) –