我一直在测试 Ninject。
有人可以解释如何将未引用的 DLL 绑定到某个接口。
这就是我所做的。
样式:服务定位器
未引用的 DLL (MyRepository.dll) 实现IMyRepository
var MyRepo = ServiceLocator.Get<DomainInterfaces.IMyRepository>();
var WorOrderStates = MyRepo.FetchWorkOrderStates();
样式:实现的依赖注入
引用的 DLL (MyRepository.dll)IMyRepository
IMyRepository service = new CoreServices.MyService(new MyRepository());
var WorOrderStates = service.FetchWorkOrderStates();
现在。这两种风格完美地工作,我很高兴,但我不希望我的客户端层知道我的 DAL (MyRepository.dll)。
Ninject 是否支持动态加载(服务定位器)功能?
喜欢:
var varMyRepository = load_Dynamically_and_get_its_Concrete_type
Kernel.Bind<IMyRepository>.To<>(varMyRepository);
==================================================== ==========================================
从 Se7en6ix 更新
嗨,多亏了你, Vinz,你已经明白了。这是我根据您的好回答修改后的版本。尽管与 Activator.CreateInstance 相比加载程序集需要 10 毫秒,但我认为这是可以接受的。
我现在需要的是检查泄漏..谢谢
const string dll = "Gasket.Infrastructure.Data.dll";
var MyAssembly = Assembly.LoadFrom(dll).CreateInstance("Infrastructure.Data.Repository", true);
var MyAssemblyType = MyAssembly.GetType();
kernel.Bind<DomainInterfaces.IServiceRepository>().To(MyAssemblyType);
var repo = kernel.Get<DomainInterfaces.IServiceRepository>();
var states = repo.FetchGRStates(); //YESSSSS!