即使在提到the following帖子后,我仍然难以统一注册我的通用依赖。
我的代码更简单,因为它没有实现GenericRepository<T>
,如下所示:
public interface ISerializer<T> where T : class
{
...
}
public class WorkflowSerializer : ISerializer<XmlFormWorkflow>
{
...
}
public class WorkflowManager
{
private readonly ISerializer<XMLFormWorkflow> _serializer;
public WorkflowManager(ISerializer<XmlFormWorkflow> serializer)
{
_serializer = serializer;
}
}
我使用的conig文件如下所示:
<unity>
<alias alias="ISerializer" type="Common.ISerializer`1, Common" />
<alias alias="WorkflowSerializer" type="Common.WorkflowSerializer, Common" />
<alias alias="XMLFormWorkflow" type="Common.XMLFormWorkflow, Common" />
<container>
<register type="ISerializer[XMLFormWorkflow]" mapTo="WorkflowSerializer" />
</container>
</unity>
我得到的错误如下:
Resolution of the dependency failed, type = "Business.WorkflowManager", name = "(none)".
Exception occurred while: while resolving.
Exception is: InvalidOperationException - The current type, Common.ISerializer`1[Common.XMLFormWorkflow], is an interface and cannot be constructed. Are you missing a type mapping?
-----------------------------------------------
At the time of the exception, the container was:
Resolving parameter "serializer" of constructor Business.WorkflowManager(Common.ISerializer`1[[Common.XMLFormWorkflow, Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] serializer)
Resolving Common.ISerializer`1[Common.XMLFormWorkflow],(none)
我已尝试在别名
中包含该类型<alias alias="ISerializer" type="Common.ISerializer`1[[Common.XMLFormWorkflow, Common]], Common" />
但这似乎也不起作用。我可以在WorkflowSerializer
内强烈输入WorkflowManager
,但这是我想避免的。
我只是希望我不会忽视一些简单的事情。 TIA
答案 0 :(得分:0)
我似乎忽略了检查我的WorkflowManager
类所在的命名空间。 ReSharper喜欢将文件的命名空间与找到该文件的相应文件夹相关联。就我而言,问题是:
namespace Common.Implementations
{
public class WorkflowSerializer : ISerializer<XMLFormWorkflow>
{
...
}
}
从命名空间中删除.Implementations
后,unity能够成功构建依赖关系。
希望我的大脑放屁长期帮助你们中的一个。