Поскольку Autofac не работает над Mono, я пытаюсь перейти на среду Windsor IoC. Я хочу найти dll для реализации моего интерфейса IDataLoader и разрешить все экземпляры.Список и разрешение реализаций интерфейса [Виндзорский замок]
вот мой код разрешения:
var container = new WindsorContainer();
System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFrom("/home/konrad/DataLoader.dll");
container.Register(AllTypes.FromAssembly(asm));
IDataLoader loader = container.Resolve<IDataLoader>();
Интерфейс выглядит следующим образом:
namespace Viewer.Core.Data
{
public interface IDataLoader
{
PointControl[] GetPositionData(string filePath);
}
}
и реализация:
using OpenTK;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Viewer.Core.Data;
using Castle.Windsor;
using Castle.MicroKernel.Registration;
namespace DataLoader
{
public class StandardDataLoader : IDataLoader
{
public StandardDataLoader()
{
}
public PointControl[] GetPositionData(string filePath)
{
return CreateCloud(filePath);
}
private PointControl[] CreateCloud(string path)
{
//loading data from file code
return points;
}
}
}
После разрешения я получаю сообщение об ошибке:
{Castle.MicroKernel.ComponentNotFoundException: No component for supporting the service Viewer.Core.Data.IDataLoader was found at Castle.MicroKernel.DefaultKernel.Castle.MicroKernel.IKernelInternal.Resolve (System.Type service, IDictionary arguments, IReleasePolicy policy) [0x00000] in <filename unknown>:0 at Castle.MicroKernel.DefaultKernel.Resolve (System.Type service, IDictionary arguments) [0x00000] in <filename unknown>:0 at Castle.Windsor.WindsorContainer.Resolve[IDataLoader]() [0x00000] in <filename unknown>:0 at (wrapper remoting-invoke-with-check) Castle.Windsor.WindsorContainer:Resolve() at ViewerMultiplatform.DataModel.LoadModel (System.String modelPath) [0x00027] in /home/konrad/hg/ViewerPrototype/OpenTKMultithread/ViewerMultiplatform/Models/DataModel.cs:103 }
Есть ли какая-либо дополнительная работа, которую я должен сделать, чтобы сделать мои классы разрешимыми по виндсорской системе? Я также пытался использовать методы register и solveall, но для меня ничего не работает.
Я думаю, вам нужно указать '.WithService.FirstInterface()' или в зависимости от того опция '.WithService' актуальна - в основном вы добавляете компоненты, но вам нужно зарегистрировать связанные с ними услуги – Charleh
(Я думаю, что имя 'AllTypes' упоминается как вводящее в заблуждение, это то же самое, что и' Classes') – Charleh
Это какая-то другая сборка? Я не вижу этого после .FromAssembly (asm) –