我正在尝试为我的IOC容器创建一个接口包装器,所以我不必依赖于特定的容器。我的问题是我在一个字符串的companyID中使用了一些服务类。我想制作像
这样的通用接口方法 T Resolve<T>()
其中T是服务接口。
现在我在幕后使用StructureMap并知道具体的构造函数是否接受了companyID所以我会做这样的事情:
ObjectFactory.With("companyid").EqualTo("someCompanyID").GetInstance<ICompanyService>();
我在接口方法中包含这种调用:
ICompanyService GetCompanyService(string companyID)
我现在的方式,应用程序必须初始化StructureMaps配置和传递服务的具体类,必须了解很多有关构造函数的知识。我希望不会发生这种情况并使包装器变得通用。有没有一种很好的方法,而不必在接口上的每个方法中添加companyID
?
答案 0 :(得分:2)
我个人并不关心抽象出MSUnity(我选择的IOC容器)。对我而言,这是一步太远了。听起来你正在使用结构图特定的功能,这将使抽象更难。
你知道CommonServiceLocator project吗?主要方法有两种方法:
protected override object DoGetInstance(Type serviceType, string key) { }
protected override IEnumerable<object> DoGetAllInstances(Type serviceType) {}
如果您坚持使用这些,您可以轻松切换。这是some more info。
答案 1 :(得分:0)
MvcContrib中有一个DependencyResolver类。
另一方面,大多数时候我只是从我的app项目中引用IoC容器。例如,我只是为ctor注入设置我的类,当我需要获取一个实例(在app项目中)时,我只是向IoC容器询问它。 IoC容器可能会担心填写ctor args但对象不知道IoC容器。这样我的app项目就是唯一需要引用IoC容器的项目。