【发布时间】:2018-01-23 18:31:11
【问题描述】:
我有一个遗留应用程序,我想修改它以使用 Ninject 来减少耦合。
我在数据层中有许多类共享一个基本类型:
public abstract class BaseData { }
public class Child1Data : BaseData { }
public class Child2Data : BaseData { }
我还有许多使用/管理这些的类:
public abstract class BaseManager { }
public class Child1Manager : BaseManager { }
public class Child2Manager : BaseManager { }
我必须创建一个相互映射的函数:
BaseManager GetManager(BaseData dataObject)
{
//Want to use Ninject to do this
if (dataObject is Child1Data)
return new Child1Manager(dataObject);
//...etc
}
我创建了一个具有以下绑定的 NinjectModule:
Bind<BaseManager>().To<Child1Manager>.Named(typeof(Child1Data).FullName);
然后在我的 GetManager() 函数中我可以这样做:
BaseManager GetManager(BaseData dataObject)
{
return ServiceLocator.Get<BaseManager>(dataObject.GetType().FullName);
}
有没有更简单、更合适的方法将服务绑定到特定类型?
我可以修改 BaseManager 的子项,但不幸的是我必须保留 BaseData 和 GetManager() 函数的签名。
提前感谢您的想法和建议。这是我第一次接触 Ninject 和依赖注入。
【问题讨论】: