StartUp.cs
このように、ファイルに 依存性注入を作成しようとするクラスがあります
services.AddTransient<IContextFactory<BlogPostContext>, ContextFactory<BlogPostContext>>();
IContextFactory
また、このようなコンストラクターに the を渡そうとします
public BlogPostRepository(IContextFactory<BlogPostContext> blogPostContext)
しかし、上記の行でエラーが発生します
'BlogPostContext' は、ジェネリック型またはメソッド 'IContextFactory' でパラメーター 'T' として使用するために、パラメーターなしのパブリック コンストラクターを持つ非抽象型である必要があります
new T()
インターフェイス宣言で制約として使用しているため、理由はわかりません。
これが私がインスタンス化しようとしているクラスです
public class BlogPostContext
{
private readonly IMongoDatabase _mongoDatabase;
private readonly IMongoClient _mongoClient;
public IMongoCollection<BlogPostModel> BlogPostModelCollection => _mongoDatabase.GetCollection<BlogPostModel>("BlogPostModel");
public BlogPostContext(IMongoDatabase mongoDatabase, IOptions<MongoDbSettings> settings)
{
_mongoDatabase = mongoDatabase;
_mongoClient = new MongoClient(settings.Value.ConnectionString);
if (null != _mongoDatabase) _mongoDatabase = _mongoClient.GetDatabase(settings.Value.Database);
}
}
汎用インターフェースとその具象実装
namespace FloormindCore.Blog.Factory
{
public interface IContextFactory<out T> where T : new()
{
T Create();
}
}
using System;
namespace FloormindCore.Blog.Factory
{
public class ContextFactory<T> : IContextFactory<T> where T : new()
{
public T Create()
{
return (T)Activator.CreateInstance(typeof(T));
}
}
}