を解決することはできません;:タイプの「Autofac.Core.Activators.Reflection.DefaultConstructorFinder」で見つかったコンストラクタのAutofac私はAutofacから、このエラーメッセージを受信していDbContext
なし「MyService`1 [あるMyContext]」になることはできません使用可能なサービスとパラメータで呼び出されます。 コンストラクタ 'Void .ctor(MyContext)'のパラメータ 'MyContext context'を解決できません。私は私が私の登録でこの行を含む場合、すべてが動作することに注意して興味を持って
IMyService myService = container.Resolve<IMyService>(); // error here
:
エラーのコード行(また、以下のコードに示されている)で発生し
builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
AnyConcreteTypeを登録するとすべてが機能するという事実は、私が何かを登録していないと信じさせてくれます。私の質問は私が何を登録していないのですか?エラーメッセージはMyContextを原因として表示しますが、明らかに私は以下のように登録しています。
AnyConcreteTypeを使用したくないのですが...私が必要とするクラスだけを明示的に登録したいからです。
私のサービスは、このように構成されています
public class MyService<T> : BaseService<T>, IMyService where T:DbContext,IMyContext
{
public MyService(T context) : base(context)
{
}
}
MyServiceではBaseServiceから派生:
public abstract class BaseService<T> : IDisposable where T:DbContext, IMyContext
{
internal T db;
public BaseService(T context)
{
db = context;
}
}
があるMyContextががMyServiceに渡され、このように構成されています
public partial class MyContext : DbContext, IMyContext
{
public MyContext(INamedConnectionString conn)
: base(conn.ConnectionString)
{
Configuration.ProxyCreationEnabled = false;
}
}
ここにありますNamedConnectionString
ここでpublic class NamedConnectionString : INamedConnectionString
{
public string ConnectionString { get; set; }
}
は、私は上記の登録方法です:
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
INamedConnectionString namedConnectionString = container.Resolve<INamedConnectionString>();
namedConnectionString.ConnectionString = myConnectionString;
IMyService myService = container.Resolve<IMyService>(); // error here