【发布时间】:2016-10-27 23:06:39
【问题描述】:
假设我有这个类:
public class ProcessObject : IProcessObject
{
public string Name { get; set; }
public ProcessObject(String Name)
{
this.Name = Name;
}
}
public interface IProcessObject
{
string Name { get; set; }
}
使用 AutoFac 作为 IoC-Container 我需要能够通过属性 Name 检索此类的唯一实例。
如果已经创建了某个名称的进程对象,我想返回该特定实例。
“使用示例代码”
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterType<ProcessObject>();
builder.RegisterType<ProcessObject>().As<IProcessObject>().;
Container = builder.Build();
var obj1 = Container.Resolve<IProcessObject>(new NamedParameter("Name", "UniqueObjectByName1"));//Does not exist, create new instance
var obj2 = Container.Resolve<IProcessObject>(new NamedParameter("Name", "UniqueObjectByName1"));//An instance with this name exists, return that instance
var obj3 = Container.Resolve<IProcessObject>(new NamedParameter("Name", "UniqueObjectByName2"));//Does not exist, create new instance
Debug.WriteLine(obj1.Equals(obj2));//this is currently returning False, I would like it to be true
Debug.WriteLine(obj1.Equals(obj3));
在我当前的代码中,我通过在 ProcessObject 类中使用静态方法和用于跟踪我的所有 ProcessObjects 的单例列表来维护这一原则。
public static GetInstance(string Name)
{
if (ProcessObjects.GetInstanceByName(Name) == null)
{
return new ProcessObject(Name);
}
else return ProcessObjects.GetInstanceByName(Name);
}
我还需要这个吗,或者 AutoFac 是否提供了一种解决方案来通过属性值返回唯一实例?
【问题讨论】: