Simple Injector - Lifestyle Mismatch
I am using unit of work pattern for my transitions. I created an DbContext which is handling connection, commit, rollback works.
In my data access and business layer classes, I inject IDbContext by constructors.
public TestDAL(IDbContext dbContext) : base(dbContext) {}
public TestService(IDbContext dbContext, ITestDAL testDAL) {}
I moved simple injector from autofac. I'm getting an exception about lifestyle mismatch.
-[Lifestyle Mismatch] TestService (Async Scoped) depends on IDbContext implemented by DbContext (Transient).
-[Lifestyle Mismatch] TestDAL (Async Scoped) depends on IDbContext implemented by DbContext (Transient).
I register my DAL and Service classes as scoped and DbContext as transient.
var ServiceRegistrations =
from type in Assembly.GetExecutingAssembly().GetTypes()
where type.Name.EndsWith("Service") && type.IsClass
from service in type.GetInterfaces()
select new { service, type };
foreach (var reg in ServiceRegistrations)
{
container.Register(reg.service, reg.type, Lifestyle.Scoped);
}
container.Register<IDbContext, DbContext>(Lifestyle.Transient);
I read some about DbContext should be transient, it is not thread safe. Also I think DAL and Service classes not necessary to create transient. How can I fix this situation? Btw, that was not problem at autofac.
c# .net dependency-injection simple-injector
add a comment |
I am using unit of work pattern for my transitions. I created an DbContext which is handling connection, commit, rollback works.
In my data access and business layer classes, I inject IDbContext by constructors.
public TestDAL(IDbContext dbContext) : base(dbContext) {}
public TestService(IDbContext dbContext, ITestDAL testDAL) {}
I moved simple injector from autofac. I'm getting an exception about lifestyle mismatch.
-[Lifestyle Mismatch] TestService (Async Scoped) depends on IDbContext implemented by DbContext (Transient).
-[Lifestyle Mismatch] TestDAL (Async Scoped) depends on IDbContext implemented by DbContext (Transient).
I register my DAL and Service classes as scoped and DbContext as transient.
var ServiceRegistrations =
from type in Assembly.GetExecutingAssembly().GetTypes()
where type.Name.EndsWith("Service") && type.IsClass
from service in type.GetInterfaces()
select new { service, type };
foreach (var reg in ServiceRegistrations)
{
container.Register(reg.service, reg.type, Lifestyle.Scoped);
}
container.Register<IDbContext, DbContext>(Lifestyle.Transient);
I read some about DbContext should be transient, it is not thread safe. Also I think DAL and Service classes not necessary to create transient. How can I fix this situation? Btw, that was not problem at autofac.
c# .net dependency-injection simple-injector
2
Change your DbContext to Scoped. See: stackoverflow.com/questions/10585478/…
– Steven
Jan 2 at 8:00
@Steven thank you.
– berkan
Jan 2 at 11:23
add a comment |
I am using unit of work pattern for my transitions. I created an DbContext which is handling connection, commit, rollback works.
In my data access and business layer classes, I inject IDbContext by constructors.
public TestDAL(IDbContext dbContext) : base(dbContext) {}
public TestService(IDbContext dbContext, ITestDAL testDAL) {}
I moved simple injector from autofac. I'm getting an exception about lifestyle mismatch.
-[Lifestyle Mismatch] TestService (Async Scoped) depends on IDbContext implemented by DbContext (Transient).
-[Lifestyle Mismatch] TestDAL (Async Scoped) depends on IDbContext implemented by DbContext (Transient).
I register my DAL and Service classes as scoped and DbContext as transient.
var ServiceRegistrations =
from type in Assembly.GetExecutingAssembly().GetTypes()
where type.Name.EndsWith("Service") && type.IsClass
from service in type.GetInterfaces()
select new { service, type };
foreach (var reg in ServiceRegistrations)
{
container.Register(reg.service, reg.type, Lifestyle.Scoped);
}
container.Register<IDbContext, DbContext>(Lifestyle.Transient);
I read some about DbContext should be transient, it is not thread safe. Also I think DAL and Service classes not necessary to create transient. How can I fix this situation? Btw, that was not problem at autofac.
c# .net dependency-injection simple-injector
I am using unit of work pattern for my transitions. I created an DbContext which is handling connection, commit, rollback works.
In my data access and business layer classes, I inject IDbContext by constructors.
public TestDAL(IDbContext dbContext) : base(dbContext) {}
public TestService(IDbContext dbContext, ITestDAL testDAL) {}
I moved simple injector from autofac. I'm getting an exception about lifestyle mismatch.
-[Lifestyle Mismatch] TestService (Async Scoped) depends on IDbContext implemented by DbContext (Transient).
-[Lifestyle Mismatch] TestDAL (Async Scoped) depends on IDbContext implemented by DbContext (Transient).
I register my DAL and Service classes as scoped and DbContext as transient.
var ServiceRegistrations =
from type in Assembly.GetExecutingAssembly().GetTypes()
where type.Name.EndsWith("Service") && type.IsClass
from service in type.GetInterfaces()
select new { service, type };
foreach (var reg in ServiceRegistrations)
{
container.Register(reg.service, reg.type, Lifestyle.Scoped);
}
container.Register<IDbContext, DbContext>(Lifestyle.Transient);
I read some about DbContext should be transient, it is not thread safe. Also I think DAL and Service classes not necessary to create transient. How can I fix this situation? Btw, that was not problem at autofac.
c# .net dependency-injection simple-injector
c# .net dependency-injection simple-injector
edited Jan 2 at 7:56
berkan
asked Jan 2 at 6:58
berkanberkan
1281111
1281111
2
Change your DbContext to Scoped. See: stackoverflow.com/questions/10585478/…
– Steven
Jan 2 at 8:00
@Steven thank you.
– berkan
Jan 2 at 11:23
add a comment |
2
Change your DbContext to Scoped. See: stackoverflow.com/questions/10585478/…
– Steven
Jan 2 at 8:00
@Steven thank you.
– berkan
Jan 2 at 11:23
2
2
Change your DbContext to Scoped. See: stackoverflow.com/questions/10585478/…
– Steven
Jan 2 at 8:00
Change your DbContext to Scoped. See: stackoverflow.com/questions/10585478/…
– Steven
Jan 2 at 8:00
@Steven thank you.
– berkan
Jan 2 at 11:23
@Steven thank you.
– berkan
Jan 2 at 11:23
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54002418%2fsimple-injector-lifestyle-mismatch%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54002418%2fsimple-injector-lifestyle-mismatch%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
2
Change your DbContext to Scoped. See: stackoverflow.com/questions/10585478/…
– Steven
Jan 2 at 8:00
@Steven thank you.
– berkan
Jan 2 at 11:23