1

我在 WCF 服务和 MVC 4 应用程序上使用 StructureMap,我已经在它们两个上都配置了它,但是一旦我运行应用程序,我就会收到以下异常:

StructureMap 异常代码:202 没有为 PluginFamily LookupsRepositories.Lookups.ILookupRepository 定义默认实例 [[JE.Domain.Lookups.Status, JE.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], LookupsRepositories,版本=1.0.0.0,文化=中性,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

4

1 回答 1

0

这里的答案与信息有关:

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>>(); 
于 2014-09-09T06:32:07.657 回答