我在WCF服务和MVC 4应用程序上使用StructureMap,我在这两个应用程序上都配置了它,但是一旦运行了应用程序,就会收到以下异常:
StructureMap异常代码:202个没有为PluginFamily JE.Domain、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null、LookupsRepositories、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null定义的默认实例
LookupRepository是一个抽象类,一个泛型类,我就是这样注册它的:
For(typeof(ILookupRepository<>)).Use(typeof(LookupRepository<>));
For<ILookupUnitOfWork>().Use<LookupUnitOfWork>();
Scan(s =>
{
s.AssemblyContainingType(typeof(LookupRepository<>));
s.ConnectImplementationsToTypesClosing(typeof(ILookupRepository<>));
});在Global.asax中调用注册表
protected void Application_Start(object sender, EventArgs e)
{
ObjectFactory.Initialize(x => x.AddRegistry(new JedcoRegistry()));
}但我还是有例外。知道为什么吗?
注: StructureMap版本2.6.4.0
发布于 2014-09-09 06:32:07
这里的答复涉及以下信息:
LookupRepository是一个抽象类。
因此,要使它运行,我们必须确定,有:
// abstract base
public class LookupRepository<T> : ILookupRepository<T>
// implementation
public class StatusRepository : LookupRepository<Status> { ... }
...
// mapping
// do not use this
// r.For(typeof(ILookupRepository<>)).Use(typeof(LookupRepository<>));
// just this
r.Scan(s =>
{
s.AssemblyContainingType(typeof(LookupRepository<>));
s.ConnectImplementationsToTypesClosing(typeof(ILookupRepository<>));
});
...
// init - will return new StatusRepository();
ObjectFactory.GetInstance<ILookupRepository<Status>>(); 如果基类不是抽象的,这也可以:
// non abstract
public class LookupRepository<T> : ILookupRepository<T>
...
// mapping
r.For(typeof(ILookupRepository<>)).Use(typeof(LookupRepository<>));
...
// init - will return new LookupRepository<Status>();
ObjectFactory.GetInstance<ILookupRepository<Status>>(); https://stackoverflow.com/questions/25719103
复制相似问题